Datos auxiliares

Para realizar conversiones a dolares de poder adquisitivo constante cargamos los datos del tipo de cambio de paridad (actualizado hasta 2018) y el índice de precios al consumidor de Estados Unidos.

#TC
tcp_arg <- as.data.table(read_excel("../resultados/argentina/renta_de_la_tierra_hidrocarburifera_arg.xlsx", sheet = "tipo_cambio")) 
tcp_arg = tcp_arg[,!c("sv", "fuente"), with = F]

ipc_us <- as.data.table(read_csv("../data/bls/cpi.csv")) 
Rows: 896 Columns: 5
-- Column specification --------------------------------------------------------------------------
Delimiter: ","
chr (3): Series ID, Period, Label
dbl (2): Year, Value

i Use `spec()` to retrieve the full column specification for this data.
i Specify the column types or set `show_col_types = FALSE` to quiet this message.
setnames(ipc_us,"Year", "anio"  )
ipc_us = ipc_us[, .(ipc_us_20 = mean(Value, na.rm=T)), by = anio]
ipc_us[, ipc_us_20 := generar_indice(serie = ipc_us_20, 
                                    fecha = anio, fecha_base = 2020)]

tail(tcp_arg)

Empleo, Remuneraciones y Masa Salarial

Valor total de la producción

Criterios metodológicos

Se presentan a continuación distintas estimaciones sobre la magnitud de riqueza presente en el sector hidrocarburífero: Valor Bruto y Agregado de Producción (VBP y VA), Consumo Interemedio (CI), Masa Salarial (MS) y Excedente Bruto de Explotación (EBE). El VBP surge de la valuación de la producción a sus precios correspondientes. El VA resulta de la diferencia entre el VBP y CI, el cual puede surgir originalmente de esta resta o a partir del coeficiente técnico de la Matriz Insumo Producto (MIP). El EBE constituye la plusvalía (PV) total de la rama, es decir, la suma de la renta de la tierra (RT) más la ganancia normal (Gnorm), y se obtiene luego de descontar la MS y los impuestos específicos (Imp) del VA. En todos los casos que se presentarán a continuación, los Imp se calcularon a partir de aplicar sobre el VBP un coeficiente resultante del peso de los impuestos promedio de la MIP de 1997. Lo mismo pasa con la estimación de la depreciación de capital o consumo de capital fijo (ConsKfijo), que se obtiene a partir de aplicar la tasa de depreciación promedio resultante de los balances de YPF (1998 - 2018) sobre el total de Propiedad, Planta y Equipo (PPyE) de la rama. Esta partida se aplica para obtener el Excedente Neto de Explotación. Se presentan distintas estimaciones para el VBP, CI y MS, que luego se observarán en la formulación matemática:

CCNN (ccnn_oficial)

  • Valores contables oficiales de las Cuentas Nacionales (sólo disponible para el período 2004-2012). Dado que se presentan series de VBP y VA, se pudo estimar el CI como la diferencia de dichas cuentas. Se procedió a separar el VBP a partir del peso del VBP de los servicios de apoyo a la extracción sobre el VBP de extracción de petróleo y gas, presente en el Cuadro de Utilización de Oferta (COU) de 2004 de INDEC. Se descontó esta proporción (resultante del 10,7%) del VBP total para obtener un VBP sólo de extracción. Dado que se posee información del salario promedio del sector y el empleo, se pudo obtener la MS resultante, tanto para el total del sector (extracción y servicios relacionados) como para sólo extracción. A partir de estos datos se elaboró un coeficiente que refleja el promedio de la proporción de la MS sobre el VBP que se utilizará en cálculos posteriores de MS total y MS de extracción.

Estimación propia con criterio CCNN (vbp_va_ci_propia)

  • Estimación propia de los valores contables a partir de las fuentes recopiladas, siguiendo los criterios de las Cuentas Nacionales. Es decir, para obtener el VBP se valua la producción destinada al mercado interno (resultante a partir de la diferencia entre producción y exportaciones) con los precios internos y las exportaciones con los precios de exportación, valuados tipo de cambio comercial (TCC). Se procedió también a separar el VBP de extracción neto de los servicios tal como se explicó anteriormente. El CI se estimó a partir de aplicar el coeficiente técnico (ratio CI/VBP) resultante de la MIP de 1997 (equivalente a 0.272). De igual manera, para calcular la masa salarial se aplicó el coeficiente de MS mencionado anteriormente. Finalmente, como se mencionó anteriormente, el VA el EBE se calcularon a partir de las diferencias mencionadas anteriormente.

Empalme CCNN (vbp_ccnn)

  • Estimación que toma los valores oficiales de las cuentas nacionales para el período donde se presentan datos (2004 -2012) y que imputa los valores faltantes por medio de la evolución del índice del VBP propio con criterio CCNN explicado anteriormente. Asimismo, se utilizaron los valores oficiales de la MS cuando se encontraba disponible el dato (1996-2018), mientras que se utilizó el valor propio estimado con criterio de las CCNN para los restantes años.

Criterio Propio (pv_hidrocarburos_propia)

  • Estimación propia que refleja con mayor precisión el valor de la riqueza total presente en el sector. El VBP se obtiene a paritr de valuar la totalidad de la producción a los precios externos o de referencia internacional y con el tipo de cambio de paridad (TCP), que mide la capacidad real de compra de la moneda nacional. Sin embargo, como el CI constituye intercambios de mercancías realizadas en el ámbito nacional, dicha partida se obtiene a partir de los valores obtenidos en la serie de empalme CCNN. De igual manera, se utilizó la MS resultante de esta última estimación.

Formulación matemática de estimaciones

Valor Bruto de Producción total, estimación con criterio propio \[VBP_{propia} = (Pext_{petróleo} * Q_{petróleo} + Pext_{gas} * Q_{gas}) * TCP\]

Donde:

  • \(VBP_{propia}\) = Valor Bruto de la Producción total, estimación propia
  • \(Pext_{petróleo}\) = Precio de exportación o referencia internacional del petróleo crudo (según corresponda)
  • \(Pext_{gas}\) = Precio de exportación o referencia internacional del gas natural (según corresponda)
  • \(Q_{petróleo}\) = Cantidades producidas totales de petróleo crudo
  • \(Q_{gas}\) = Cantidades producidas totales de gas natural
  • \(TCP\) = Tipo de Cambio de Paridad

Valor Bruto de Producción total, estimación con criterio CCNN \[VBP_{CCNN} = (Pint_{petróleo} * QMInt_{petróleo} + Pext_{petróleo} * Expo_{petróleo} + Pint_{gas} * QMInt_{gas} + Pext_{gas} * Expo_{gas})* TCC\]

Donde:

  • \(VBP_{CCNN}\) = Valor Bruto de la Producción total, estimación propia con criterio de las CCNN
  • \(Pint_{petróleo}\) = Precio mercado interno del petróleo crudo
  • \(Pint_{gas}\) = Precio mercado interno del gas natural
  • \(QMInt_{petróleo}\) = cantidades vendidas al mercado interno de petróleo crudo
  • \(QMInt_{gas}\) = cantidades vendidas al mercado interno del gas natural
  • \(Expo_{petróleo}\) = exportaciones de petróleo crudo
  • \(Expo_{gas}\) = exportaciones de gas natural
  • \(TCC\) = Tipo de Cambio Comercial


Valor Bruto de Producción extracción, estimación con criterio CCNN

\[VBP\_extr_{CCNN} = VBP_{CCNN} * (1-prop\_servicios)\]

Donde:

  • \(VBP\_extr_{CCNN}\) = Valor Bruto de la Producción extracción, estimación propia con criterio de las CCNN
  • \(prop\_extr\) = proporción del VBP de servicios de apoyo sobre VBP de extracción de petróleo y gas

Proporción de los servicios de apoyo sobre la extracción de petróleo y gas
\[prop\_servicios = \frac{VBP\_servicios_{COU}}{VBP\_extr_{COU} + VBP\_servicios_{COU}}\]

Donde:

  • \(VBP\_servicios_{COU}\) = VBP de servicios de apoyo del Cuadro de Utilización de Oferta
  • \(VBP\_extracción_{COU}\) = VBP de extracción de petróleo y gas del Cuadro de Utilización de Oferta


Consumo Intermedio, valores oficiales de las CCNN \[ CI_{CCNN} = VBP_{CCNN} - VA_{CCNN} \]

Donde:

  • \(CI_{CCNN}\) = Consumo Intermedio total, estimación propia
  • \(VA_{CCNN}\) = Valor Agregado, estimación de las CCNN


Consumo Intermedio, estimación con criterio CCNN \[ CI_{CCNN} = VBP_{CCNN} * Coef\_tec \] Donde:

  • \(Coef\_tec\) = Coeficiente técnico de Matriz Insumo Producto


Consumo Intermedio de extracción, estimación con criterio CCNN

\[ CI\_extr_{CCNN} = VBP\_extr_{CCNN} * Coef\_tec \]

Donde:

  • $ CI_extr_{CCNN}$ = Consumo Intermedio de extracción, estimación criterio CCNN


Masa Salarial, valores oficiales de las CCNN \[MS = W * Emp * 13\] Donde:

  • \(MS\) = Masa Salarial
  • \(W\) = Salario anual promedio
  • \(Emp\) = Empleo


Masa Salarial, estimación con criterio CCNN \[MS = VBP_{CCNN} * Coef\_MS\]

Donde:

  • \(Coef\_MS\) = Coeficiente de la proporción de MS sobre VBP


Masa Salarial de extracción, estimación con criterio CCNN \[MS\_extr = VBP\_extr_{CCNN} * Coef\_MS\]

Donde:

  • \(MS\_extr\) = Masa salarial del sector extracción


Valor agregado, estimación criterio CCNN \[VA_{CCNN} = VBP_{CCNN} – CI_{CCNN} \] Donde:

  • \(VA_{CCNN}\) = Valor Agregado, estimación propia con criterio CCNN


Valor agregado de extracción, estimación con criterio CCNN \[VA\_extr_{CCNN} = VBP\_extr_{CCNN} – CI\_extr_{CCNN} \]

Donde:

  • \(VA\_extr_{CCNN}\) = Valor Agregado de extracción, estimación propia con criterio CCNN


Valor agregado, estimación con criterio propio \[VA_{propia} = VBP_{propia} – CI\_extr_{CCNN} \]

Donde:

  • \(VA_{propia}\) = Valor Agregado, estimación con criterio propio


Excedente Bruto de Explotación, estimación con criterio CCNN \[EBE_{CCNN} = VA_{CCNN} – MS \]

Excedente Bruto de Explotación de extracción, estimación con criterio CCNN \[EBE\_extr_{CCNN} = VA\_extr_{CCNN} – MS\_extr \]


Excedente Bruto de Explotación, estimación con criterio propio \[EBE_{propia} = VA_{propia} – MS\_extr \]

Donde:

  • \(EBE\) = Excedente Bruto de Explotación
  • \(CI\_extr_{CCNN}\) = Consumo intermedio del sector extracción, estimación con criterio CCNN


Consumo de Capital Fijo, estimación con criterio propio \[ConKfijo = PPyE * prom(\frac{Dep}{PPyE}) \]

Donde:

  • \(ConKfijo\) = Consumo de Capital Fijo
  • \(PPyE\)= Propiedad, Planta y Equipo neta
  • $prom() $ = tasa de depreciación promedio
  • \(Dep\) = Depreciaciones (cuenta gastos por naturaleza)


Plusvalía (Excedente Neto de Explotación), estimación con criterio propio \[PV_{propia} = VA_{propia} - ConKfijo - Imp \]

Donde:

  • \(PV_{propia}\) = Plusvalía (Excedente Neto de Explotación)
  • \(Imp\) = Impuestos normales

Fuentes para la construcción de series de largo plazo

······················· * Criterio de cómputo de la producción de gas: + 1911 a 1992: Anuario de combustibles + 1993 en adelante: SESCO Downstream

valor_total_produccion = read.csv("../resultados/data_viz/valor_total_produccion.csv")
graf_valor_produccion <- valor_total_produccion %>%
  filter(anio > 1960) %>%
  ggplot( aes(anio, valor, color = fuente))+
  geom_line(alpha = 0.7)+
  geom_point(size = 0.435, alpha = 0.2)+
  theme_classic()+
  theme(legend.position = "bottom")+
  labs(title = "Valor de la Producción hidrocarburífera",
       subtitle = "Valor total y componentes",
       y = "Millones de pesos de 2018")+
  facet_wrap(~variable)
gp <- ggplotly(graf_valor_produccion)#, width = 750, height = 700)
gp[['x']][['layout']][['annotations']][[2]][['x']] <- -0.11
gp %>% layout(margin = list(l = 75))

Renta de la tierra hidrocarburífera total. En precios constantes, sobre Plusvalía Total y PBI

Existen dos caminos para llegar al monto total de renta de la tierra hidrocarburífera: uno es descontando la ganancia normal de las empresas a la plusvalía total del sector y el otro es por medio de la suma de mecanismos de apropiación.

\[Renta\_hidrocarburífera = PV_{hidrocarburífera} - Gcia\_Normal_{hidrocarburífera}\]

Donde:

\[Gcia\_Normal_{hidrocarburífera} = KTA_{hidrocarburífero} * TG_{referencia}\]

Donde:

En este caso, seleccionamos la tasa de ganancia del sector industrial como parámetro para diferenciar la renta de la ganancia. A su vez, para el capital total adelantado de las empresas hidrocarburíferas, seleccionamos unicamente el valor resultante de la estimación de la PPyE de Bolsar, por lo que le faltan los inventarios y salarios adelantados.

El cálculo de renta total hidrocarburífera que se obtiene por medio de descontar la ganancia normal a la plusvalía total del sector, debe ser igual a la renta obtenida por medio de la agregación de los distintos mecanismos de apropiación. Es decir:

\[Renta\_hidrocarburífera = Renta\_diferencial\_precios + Renta\_sobrevaluación + Renta\_empresas + Impuestos\_netos\_específicos \] \[Impuestos\_netos\_específicos = Retenciones + Regalías - Subsidios\]

Renta de la tierra calculada a partir de descuentos sobre el valor bruto de producción (método directo)

graf_renta_directo_pbi <- renta_directo_pbi %>%
  select(anio, renta_pv,renta_pbi ) %>%
  # filter(anio >= 1962, fuente_gcia == "Propia") %>%
  filter(anio >= 1962) %>%
  gather(key = tipo_renta,
         value = valor,
         2:3) %>%
  ggplot(aes(anio, valor))+
  # geom_col(position = "dodge")+
  geom_line()+
  theme(legend.position = "bottom",
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1))+
  labs(title = "Renta hidrocarburífera total sobre PBI y Ganancias Totales",
       subtitle = "A partir de estimación propia del VBP",
       y = "%")+
  scale_y_continuous(labels=scales::percent_format(accuracy = 2))+
  facet_grid(~tipo_renta )
graf_renta_directo_pbi
# ggplotly(graf_renta_directo_pbi, height = 400, width = 600)

Renta de la tierra calculada a partir de suma de mecanismos de apropiación (método indirecto)

Impuestos y subsidios

Regalias

Retenciones

Subsidios

# ###### proporcion subsidios (viene del script preprocesamiento)
# renta_indirecto[,c("anio","proporcion_subsidios")] %>% arrange(-anio)
# renta_directo %>%
#   mutate(peso_subsidios = subsidios/renta_total,
#          metodo = "Directo") %>%
#          select(anio, metodo, peso_subsidios, renta_total) %>%
#   rbind(renta_indirecto %>%
#           mutate(peso_subsidios = subsidios/renta_total,
#                  metodo = "Indirecto") %>%
#           select(anio,metodo,  peso_subsidios, renta_total)) %>%
#   filter(anio > 2004) %>%
#   reshape2::melt(id.vars = c("anio", "metodo")) %>%
#   ggplot(aes(anio, value, color = metodo))+
#   geom_line()+
# facet_wrap(~variable,scales= "free")

Suma de mecanismos

renta_mecanismos = as.data.table(read_excel("../resultados/argentina/renta_de_la_tierra_hidrocarburifera_arg.xlsx", sheet = "RTPG_mecanismos"))
 
renta_mecanismos = renta_mecanismos[,!c("Rtt", "IPC_18", "unidad"), with = F] 
renta_mecanismos[, Subs := Subs *-1]
renta_mecanismos = melt(renta_mecanismos, id.vars = "anio",
                        variable.name = "tipo_renta",
                        value.name = "valor")
renta_mecanismos = Reduce(merge_func, list(renta_mecanismos, tcp_arg, ipc_us))
renta_mecanismos[, valor := ((valor/1e6)/TCp)/ipc_us_20]
renta_mecanismos[, unidad := "Millones de USD TCp de 2020"]

renta_plot3 = ggplot(renta_mecanismos, aes(anio, valor, 
                             color = tipo_renta, fill = tipo_renta))+
  geom_col(position = "stack")+
  theme(legend.position = "bottom")+
  labs(title = "Renta de la tierra hidrocarburífera",
       subtitle = "Cursos de apropiación",
       y = "Millones USD TCc de 2020")+
  scale_x_continuous(breaks = seq(1960, 2020, 5))+
  scale_y_continuous(breaks = seq(0, 50000, 10000),
                     labels=function(x) format(x, big.mark = ".", scientific = FALSE))+
  theme_classic()
renta_plot3 = plot_theme(renta_plot3)+theme(legend.title = element_blank(),
                              axis.title.x = element_blank(),
                              axis.text.x = element_text(angle = 45,
                                                         vjust= 0.7, hjust= 0.5))
renta_plot3
ggsave("../resultados/argentina/renta_mecanismos_tcp.png",renta_plot3)

Comparación de estimaciones propias

renta_pextq = read_excel("../resultados/argentina/renta_de_la_tierra_hidrocarburifera_arg.xlsx", sheet = "RTPG_PextQ") %>% 
  select(anio ,unidad, valor = Rtt) %>% 
  mutate(var = "Renta por descuentos sobre plusvalía")

renta_mecanismos = read_excel("../resultados/argentina/renta_de_la_tierra_hidrocarburifera_arg.xlsx", sheet = "RTPG_mecanismos") %>% 
  select(anio ,unidad, valor = Rtt) %>% 
  mutate(var = "Renta por suma de mecanismos")


renta_arg = as.data.table(rbind(renta_pextq, renta_mecanismos))

merge_func <- function(...) merge(..., all.x = T, by = "anio")

renta_usd = Reduce(merge_func, list(renta_arg, tcp_arg, ipc_us))
renta_usd[, valor := ((valor/1e6)/TCp)/ipc_us_20]
renta_usd[, unidad := "Millones de USD TCp de 2020"]
# renta_usd = merge(renta_usd, tcp_arg, by = "anio", all.x= T)

renta_plot1 = ggplot(renta_usd[anio > 1995], aes(anio, valor, color = var))+
  geom_line()+
  labs(title = "Renta hidrocarburífera total de Argentina",
       subtitle = "Comparación de estimaciones propias",
       y = "Millones de USD TCp de 2020")+
  # scale_y_continuous(breaks = seq(0, 60*1e4, 10*1e4))
  scale_y_continuous(breaks = seq(0, 60000, 10000))
renta_plot1 = plot_theme(renta_plot1)+theme(legend.title = element_blank(),
                              axis.title.x = element_blank())

ggsave( filename = "../resultados/argentina/renta_mecanismos_y_pxq_ARG.png", 
        renta_plot1, width = 12, height = 10)
renta_plot1
renta_pextq_pbi = read_excel("../resultados/argentina/renta_de_la_tierra_hidrocarburifera_arg.xlsx", sheet = "RTPG_PextQ_vs_pib") %>% 
  mutate(var = "Renta por descuentos sobre plusvalía")

renta_mecanismos_pbi = read_excel("../resultados/argentina/renta_de_la_tierra_hidrocarburifera_arg.xlsx", sheet = "RTPG_mecanismos_vs_pib") %>% 
  mutate(var = "Renta por suma de mecanismos")

renta_pbi = as.data.table(rbind(renta_pextq_pbi, renta_mecanismos_pbi))
renta_pbi = renta_pbi[, !"unidad", with=F]
renta_pbi = melt(renta_pbi, id.vars = c("anio", "var"))

renta_plot2 = ggplot(renta_pbi, aes(anio, value, color = var))+
  geom_line()+
  facet_wrap(~variable, ncol =1)+
  scale_y_continuous(labels = scales::percent_format(accuracy = 2))+
  scale_x_continuous(breaks = seq(1960, 2020, 5))
renta_plot2 = plot_theme(renta_plot2)+theme(legend.title = element_blank(),
                              axis.title.x = element_blank(),
                              axis.text.x = element_text(angle = 45,
                                                         vjust= 0.7, hjust= 0.5),
                              axis.title.y = element_blank())
renta_plot2

Comparación con estimación de otros autores

#cargo renta autores
renta_autores <- fread("../resultados/argentina/renta_autores.csv") 
renta_autores = merge(renta_autores, ipc_us, all.x=T, by = "anio")
renta_autores[, valor := valor /ipc_us_20]
renta_autores[, unidad := "Millones de USD TCc de 2020"]
renta_autores = renta_autores[,!"ipc_us_20", with=F]
renta_autores = merge(renta_autores, tcp_arg, all.x= T, by = "anio")
renta_autores[,valor := (valor*TCc)/TCp]
renta_autores= renta_autores[, !c("TCc", "TCp"), with = F]

#preproceso renta total
renta_usd = renta_usd[, !c("TCc", "TCp", "ipc_us_20"), with = F]
setnames(renta_usd, "var", "tipo_de_renta")
renta_usd[, autor := "Propia"]

#preproceso renta mecanismos
renta_mecanismos[, autor := "Propia"]
renta_mecanismos = renta_mecanismos[, !c("TCc", "TCp", "ipc_us_20"), with = F]
setnames(renta_mecanismos, "tipo_renta", "tipo_de_renta")
renta_mecanismos = dcast(renta_mecanismos, anio+autor+unidad~tipo_de_renta, value.var = "valor")
renta_mecanismos[, `:=`(renta_diferencial_precios = rowSums(cbind(Rdifp_crudo, Rdifp_gas), na.rm=T),
                        renta_estado_total = rowSums(cbind(Rret, Rreg), na.rm=T),
                        renta_sobrevaluacion = rowSums(cbind(Rsvx_crudo, Rsvx_gas), na.rm=T),
                        Subs = Subs*-1)]
renta_mecanismos= renta_mecanismos[, !c("Rdifp_crudo", "Rdifp_gas",
                                        "Rsvx_crudo", "Rsvx_gas"), with=F]
setnames(renta_mecanismos, c("Rkindv", "Subs", "Rret",  "Rreg"), 
         c("renta_empresas", "subsidios", "retenciones", "regalias") )
renta_mecanismos = melt(renta_mecanismos,id.vars = c("anio", "autor", "unidad"), variable.name = "tipo_de_renta",
     value.name = "valor")
#junto los datos
renta_comparacion = rbind(renta_usd, renta_mecanismos, renta_autores)
#grafico renta total
graf_renta_total_comparacion = ggplot(data = renta_comparacion[str_detect(tipo_de_renta , "renta_total|Renta por suma de mecanismos") & anio > 1990], 
       aes(anio, valor, color = autor))+
  geom_line()+
  geom_point()+
  theme(legend.position = "bottom")+
  labs(title = "Renta de la tierra hidrocarburífera total de Argentina",
       subtitle = "Comparación con otras estimaciones",
       y = "Millones de USD TCp de 2020", x="",
       caption = "Nota: en la estimación propia se utilizó la renta por por suma de mecanismos")+
  theme_classic()+
  scale_x_continuous(breaks = seq(1960, 2020, 5))+
  scale_y_continuous(labels=function(x) format(x, big.mark = ".", scientific = FALSE))
graf_renta_total_comparacion =plot_theme( graf_renta_total_comparacion)+theme(
  legend.title = element_blank())
graf_renta_total_comparacion

ggsave("../resultados/argentina/comparacion_autores_usd_tcp.png", graf_renta_total_comparacion,
         width = 10, height = 5)
#grafico comparacion con otros autores
graf_tipos_renta <- ggplot(data = renta_comparacion[!str_detect(tipo_de_renta, c("renta_total|Renta por descuentos sobre plusvalía|Renta por suma de mecanismos|renta_estado_total"
                                 # "renta_diferencial_precios",
                               ))& anio >1990],
       aes(anio, valor, color = autor))+
  geom_line()+
  geom_point(size = 0.5)+
  geom_hline(yintercept = 0)+
  facet_wrap(~tipo_de_renta, scales = "free_y")+
  labs(title = "Renta de la tierra hidrocarburífera",
       subtitle = "Comparación de estimaciones",
       y = "Millones USD TCp de 2020")+
  scale_x_continuous(breaks = seq(1990, 2020, 5))
# # # ggplotly(graf_tipos_renta, width = 800, height = 600)
graf_tipos_renta = plot_theme(graf_tipos_renta)+theme(
  axis.text.x = element_text(angle = 45, hjust = 1),
  strip.text = element_text(12), legend.title = element_blank() )

graf_tipos_renta
ggsave("../resultados/argentina/comparacion_autores_tipo_renta_usd_tcp.png",
       graf_tipos_renta, width = 16, height = 10)
LS0tDQp0aXRsZTogIlZhbG9yIHRvdGFsIGRlIGxhIHByb2R1Y2Npw7NuOiBtYXNhIHNhbGFyaWFsLCBnYW5hbmNpYSB5IHJlbnRhIGRlIGxhIHRpZXJyYSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KI2xpbXBpZXphIGRlIG1lbW9yaWENCnJtKGxpc3QgPWxzKCkpDQpnYygpDQoNCiMgY29uZmlndXJhY2nDs24gZGUgaW1wcmVzacOzbg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KDQojIGJpYmxpb3RlY2FzDQpsaWJyYXJ5KGRhdGEudGFibGUpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkocmVhZHhsKQ0Kc291cmNlKCJmdW5jdGlvbnNfaGlkcm9jYXJidXJvcy5SIikNCg0KIyBwYXLDoW1ldHJvcyBwYXJhIGxvcyBncmFmaWNvcw0KYWxwaGFfbiA9IDAuNw0KYGBgDQoNCiMgRGF0b3MgYXV4aWxpYXJlcw0KUGFyYSByZWFsaXphciBjb252ZXJzaW9uZXMgYSBkb2xhcmVzIGRlIHBvZGVyIGFkcXVpc2l0aXZvIGNvbnN0YW50ZSBjYXJnYW1vcyBsb3MgZGF0b3MgZGVsIHRpcG8gZGUgY2FtYmlvIGRlIHBhcmlkYWQgKGFjdHVhbGl6YWRvIGhhc3RhIDIwMTgpIHkgZWwgw61uZGljZSBkZSBwcmVjaW9zIGFsIGNvbnN1bWlkb3IgZGUgRXN0YWRvcyBVbmlkb3MuIA0KYGBge3J9DQojVEMNCnRjcF9hcmcgPC0gYXMuZGF0YS50YWJsZShyZWFkX2V4Y2VsKCIuLi9yZXN1bHRhZG9zL2FyZ2VudGluYS9yZW50YV9kZV9sYV90aWVycmFfaGlkcm9jYXJidXJpZmVyYV9hcmcueGxzeCIsIHNoZWV0ID0gInRpcG9fY2FtYmlvIikpIA0KdGNwX2FyZyA9IHRjcF9hcmdbLCFjKCJzdiIsICJmdWVudGUiKSwgd2l0aCA9IEZdDQoNCmlwY191cyA8LSBhcy5kYXRhLnRhYmxlKHJlYWRfY3N2KCIuLi9kYXRhL2Jscy9jcGkuY3N2IikpIA0Kc2V0bmFtZXMoaXBjX3VzLCJZZWFyIiwgImFuaW8iICApDQppcGNfdXMgPSBpcGNfdXNbLCAuKGlwY191c18yMCA9IG1lYW4oVmFsdWUsIG5hLnJtPVQpKSwgYnkgPSBhbmlvXQ0KaXBjX3VzWywgaXBjX3VzXzIwIDo9IGdlbmVyYXJfaW5kaWNlKHNlcmllID0gaXBjX3VzXzIwLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlY2hhID0gYW5pbywgZmVjaGFfYmFzZSA9IDIwMjApXQ0KDQp0YWlsKHRjcF9hcmcpDQpgYGANCg0KIyBFbXBsZW8sIFJlbXVuZXJhY2lvbmVzIHkgTWFzYSBTYWxhcmlhbCANCg0KKiBTYWxhcmlvIHkgZW1wbGVvDQogICsgTVRFeVNTIChCYXNlIE1pbmVyw61hIGUgSGlkcm9jYXJidXJvcyBkZSBsYXMgQ3VlbnRhcyBOYWNpb25hbGVzKSAoMTk5Ni0yMDEzKQ0KICArIFtNaW5pc3RlcmlvIGRlIFRyYWJham8sIEVtcGxlbyB5IFNlZ3VyaWRhZCBTb2NpYWwgLSBPYnNlcnZhdG9yaW8gZGUgRW1wbGVvIHkgRGluw6FtaWNhIEVtcHJlc2FyaWFsIChPRURFKV0oaHR0cDovL3d3dy50cmFiYWpvLmdvYi5hci9lc3RhZGlzdGljYXMvb2VkZS9lc3RhZGlzdGljYXNuYWNpb25hbGVzLmFzcCkgKDE5OTYtMjAxOSkNCiAgKyBFUEggPz8NCjxicj4NCg0KDQpgYGB7cn0NCg0KYGBgDQoNCiMgVmFsb3IgdG90YWwgZGUgbGEgcHJvZHVjY2nDs24gIA0KDQoNCiMjIENyaXRlcmlvcyBtZXRvZG9sw7NnaWNvcyANClNlIHByZXNlbnRhbiBhIGNvbnRpbnVhY2nDs24gZGlzdGludGFzIGVzdGltYWNpb25lcyBzb2JyZSBsYSBtYWduaXR1ZCBkZSByaXF1ZXphIHByZXNlbnRlIGVuIGVsIHNlY3RvciBoaWRyb2NhcmJ1csOtZmVybzogVmFsb3IgQnJ1dG8geSBBZ3JlZ2FkbyBkZSBQcm9kdWNjacOzbiAoVkJQIHkgVkEpLCBDb25zdW1vIEludGVyZW1lZGlvIChDSSksIE1hc2EgU2FsYXJpYWwgKE1TKSB5IEV4Y2VkZW50ZSBCcnV0byBkZSBFeHBsb3RhY2nDs24gKEVCRSkuIEVsIFZCUCBzdXJnZSBkZSBsYSB2YWx1YWNpw7NuIGRlIGxhIHByb2R1Y2Npw7NuIGEgc3VzIHByZWNpb3MgY29ycmVzcG9uZGllbnRlcy4gRWwgVkEgcmVzdWx0YSBkZSBsYSBkaWZlcmVuY2lhIGVudHJlIGVsIFZCUCB5IENJLCBlbCBjdWFsIHB1ZWRlIHN1cmdpciBvcmlnaW5hbG1lbnRlIGRlIGVzdGEgcmVzdGEgbyBhIHBhcnRpciBkZWwgY29lZmljaWVudGUgdMOpY25pY28gZGUgbGEgTWF0cml6IEluc3VtbyBQcm9kdWN0byAoTUlQKS4gRWwgRUJFIGNvbnN0aXR1eWUgbGEgcGx1c3ZhbMOtYSAoUFYpIHRvdGFsIGRlIGxhIHJhbWEsIGVzIGRlY2lyLCBsYSBzdW1hIGRlIGxhIHJlbnRhIGRlIGxhIHRpZXJyYSAoUlQpIG3DoXMgbGEgZ2FuYW5jaWEgbm9ybWFsIChHbm9ybSksIHkgc2Ugb2J0aWVuZSBsdWVnbyBkZSBkZXNjb250YXIgbGEgTVMgeSBsb3MgaW1wdWVzdG9zIGVzcGVjw61maWNvcyAoSW1wKSBkZWwgVkEuIEVuIHRvZG9zIGxvcyBjYXNvcyBxdWUgc2UgcHJlc2VudGFyw6FuIGEgY29udGludWFjacOzbiwgbG9zIEltcCBzZSBjYWxjdWxhcm9uIGEgcGFydGlyIGRlIGFwbGljYXIgc29icmUgZWwgVkJQIHVuIGNvZWZpY2llbnRlICByZXN1bHRhbnRlIGRlbCBwZXNvIGRlIGxvcyBpbXB1ZXN0b3MgcHJvbWVkaW8gZGUgbGEgIE1JUCBkZSAxOTk3LiBMbyBtaXNtbyBwYXNhIGNvbiBsYSBlc3RpbWFjacOzbiBkZSBsYSBkZXByZWNpYWNpw7NuIGRlIGNhcGl0YWwgbyBjb25zdW1vIGRlIGNhcGl0YWwgZmlqbyAoQ29uc0tmaWpvKSwgcXVlIHNlIG9idGllbmUgYSBwYXJ0aXIgZGUgYXBsaWNhciBsYSB0YXNhIGRlIGRlcHJlY2lhY2nDs24gcHJvbWVkaW8gcmVzdWx0YW50ZSBkZSBsb3MgYmFsYW5jZXMgZGUgWVBGICgxOTk4IC0gMjAxOCkgc29icmUgZWwgdG90YWwgZGUgUHJvcGllZGFkLCBQbGFudGEgeSBFcXVpcG8gKFBQeUUpIGRlIGxhIHJhbWEuIEVzdGEgcGFydGlkYSBzZSBhcGxpY2EgcGFyYSBvYnRlbmVyIGVsIEV4Y2VkZW50ZSBOZXRvIGRlIEV4cGxvdGFjacOzbi4gU2UgcHJlc2VudGFuIGRpc3RpbnRhcyBlc3RpbWFjaW9uZXMgcGFyYSBlbCBWQlAsIENJIHkgTVMsIHF1ZSBsdWVnbyBzZSBvYnNlcnZhcsOhbiBlbiBsYSBmb3JtdWxhY2nDs24gbWF0ZW3DoXRpY2E6DQoNCg0KDQojIyMgQ0NOTiAoKmNjbm5fb2ZpY2lhbCopDQogICsgVmFsb3JlcyBjb250YWJsZXMgb2ZpY2lhbGVzIGRlIGxhcyBDdWVudGFzIE5hY2lvbmFsZXMgKHPDs2xvIGRpc3BvbmlibGUgcGFyYSBlbCBwZXLDrW9kbyAyMDA0LTIwMTIpLiBEYWRvIHF1ZSBzZSBwcmVzZW50YW4gc2VyaWVzIGRlIFZCUCB5IFZBLCBzZSBwdWRvIGVzdGltYXIgZWwgQ0kgY29tbyBsYSBkaWZlcmVuY2lhIGRlIGRpY2hhcyBjdWVudGFzLiBTZSBwcm9jZWRpw7MgYSBzZXBhcmFyIGVsIFZCUCBhIHBhcnRpciBkZWwgcGVzbyBkZWwgVkJQIGRlIGxvcyBzZXJ2aWNpb3MgZGUgYXBveW8gYSBsYSBleHRyYWNjacOzbiBzb2JyZSBlbCBWQlAgZGUgZXh0cmFjY2nDs24gZGUgcGV0csOzbGVvIHkgZ2FzLCBwcmVzZW50ZSBlbiBlbCBDdWFkcm8gZGUgVXRpbGl6YWNpw7NuIGRlIE9mZXJ0YSAoQ09VKSBkZSAyMDA0IGRlIElOREVDLiBTZSBkZXNjb250w7MgZXN0YSBwcm9wb3JjacOzbiAocmVzdWx0YW50ZSBkZWwgMTAsNyUpIGRlbCBWQlAgdG90YWwgcGFyYSBvYnRlbmVyIHVuIFZCUCBzw7NsbyBkZSBleHRyYWNjacOzbi4gRGFkbyBxdWUgc2UgcG9zZWUgaW5mb3JtYWNpw7NuIGRlbCBzYWxhcmlvIHByb21lZGlvIGRlbCBzZWN0b3IgeSBlbCBlbXBsZW8sIHNlIHB1ZG8gb2J0ZW5lciBsYSBNUyByZXN1bHRhbnRlLCB0YW50byBwYXJhIGVsIHRvdGFsIGRlbCBzZWN0b3IgKGV4dHJhY2Npw7NuIHkgc2VydmljaW9zIHJlbGFjaW9uYWRvcykgY29tbyBwYXJhIHPDs2xvIGV4dHJhY2Npw7NuLiBBIHBhcnRpciBkZSBlc3RvcyBkYXRvcyBzZSBlbGFib3LDsyB1biBjb2VmaWNpZW50ZSBxdWUgcmVmbGVqYSBlbCBwcm9tZWRpbyBkZSBsYSBwcm9wb3JjacOzbiBkZSBsYSBNUyBzb2JyZSBlbCBWQlAgcXVlIHNlIHV0aWxpemFyw6EgZW4gY8OhbGN1bG9zIHBvc3RlcmlvcmVzIGRlIE1TIHRvdGFsIHkgTVMgZGUgZXh0cmFjY2nDs24uIA0KDQojIyMgRXN0aW1hY2nDs24gcHJvcGlhIGNvbiBjcml0ZXJpbyBDQ05OICgqdmJwX3ZhX2NpX3Byb3BpYSopDQogICsgRXN0aW1hY2nDs24gcHJvcGlhIGRlIGxvcyB2YWxvcmVzIGNvbnRhYmxlcyBhIHBhcnRpciBkZSBsYXMgZnVlbnRlcyByZWNvcGlsYWRhcywgc2lndWllbmRvIGxvcyBjcml0ZXJpb3MgZGUgbGFzIEN1ZW50YXMgTmFjaW9uYWxlcy4gRXMgZGVjaXIsIHBhcmEgb2J0ZW5lciBlbCBWQlAgc2UgdmFsdWEgbGEgcHJvZHVjY2nDs24gZGVzdGluYWRhIGFsIG1lcmNhZG8gaW50ZXJubyAocmVzdWx0YW50ZSBhIHBhcnRpciBkZSBsYSBkaWZlcmVuY2lhIGVudHJlIHByb2R1Y2Npw7NuIHkgZXhwb3J0YWNpb25lcykgY29uIGxvcyBwcmVjaW9zIGludGVybm9zIHkgbGFzIGV4cG9ydGFjaW9uZXMgY29uIGxvcyBwcmVjaW9zIGRlIGV4cG9ydGFjacOzbiwgdmFsdWFkb3MgdGlwbyBkZSBjYW1iaW8gY29tZXJjaWFsIChUQ0MpLiBTZSBwcm9jZWRpw7MgdGFtYmnDqW4gYSBzZXBhcmFyIGVsIFZCUCBkZSBleHRyYWNjacOzbiBuZXRvIGRlIGxvcyBzZXJ2aWNpb3MgdGFsIGNvbW8gc2UgZXhwbGljw7MgYW50ZXJpb3JtZW50ZS4gRWwgQ0kgc2UgZXN0aW3DsyBhIHBhcnRpciBkZSBhcGxpY2FyIGVsIGNvZWZpY2llbnRlIHTDqWNuaWNvIChyYXRpbyBDSS9WQlApIHJlc3VsdGFudGUgZGUgbGEgTUlQIGRlIDE5OTcgKGVxdWl2YWxlbnRlIGEgMC4yNzIpLiBEZSBpZ3VhbCBtYW5lcmEsIHBhcmEgY2FsY3VsYXIgbGEgbWFzYSBzYWxhcmlhbCBzZSBhcGxpY8OzIGVsIGNvZWZpY2llbnRlIGRlIE1TIG1lbmNpb25hZG8gYW50ZXJpb3JtZW50ZS4gRmluYWxtZW50ZSwgY29tbyBzZSBtZW5jaW9uw7MgYW50ZXJpb3JtZW50ZSwgZWwgVkEgZWwgRUJFIHNlIGNhbGN1bGFyb24gYSBwYXJ0aXIgZGUgbGFzIGRpZmVyZW5jaWFzIG1lbmNpb25hZGFzIGFudGVyaW9ybWVudGUuIA0KDQojIyMgRW1wYWxtZSBDQ05OICgqdmJwX2Njbm4qKQ0KICArIEVzdGltYWNpw7NuIHF1ZSB0b21hIGxvcyB2YWxvcmVzIG9maWNpYWxlcyBkZSBsYXMgY3VlbnRhcyBuYWNpb25hbGVzIHBhcmEgZWwgcGVyw61vZG8gZG9uZGUgc2UgcHJlc2VudGFuIGRhdG9zICgyMDA0IC0yMDEyKSB5IHF1ZSBpbXB1dGEgbG9zIHZhbG9yZXMgZmFsdGFudGVzIHBvciBtZWRpbyBkZSBsYSBldm9sdWNpw7NuIGRlbCDDrW5kaWNlIGRlbCBWQlAgcHJvcGlvIGNvbiBjcml0ZXJpbyBDQ05OIGV4cGxpY2FkbyBhbnRlcmlvcm1lbnRlLiBBc2ltaXNtbywgc2UgdXRpbGl6YXJvbiBsb3MgdmFsb3JlcyBvZmljaWFsZXMgZGUgbGEgTVMgY3VhbmRvIHNlIGVuY29udHJhYmEgZGlzcG9uaWJsZSBlbCBkYXRvICgxOTk2LTIwMTgpLCBtaWVudHJhcyBxdWUgc2UgdXRpbGl6w7MgZWwgdmFsb3IgcHJvcGlvIGVzdGltYWRvIGNvbiBjcml0ZXJpbyBkZSBsYXMgQ0NOTiBwYXJhIGxvcyByZXN0YW50ZXMgYcOxb3MuIA0KICANCiMjIyBDcml0ZXJpbyBQcm9waW8gKCpwdl9oaWRyb2NhcmJ1cm9zX3Byb3BpYSopDQogICsgRXN0aW1hY2nDs24gcHJvcGlhIHF1ZSByZWZsZWphIGNvbiBtYXlvciBwcmVjaXNpw7NuIGVsIHZhbG9yIGRlIGxhIHJpcXVlemEgdG90YWwgcHJlc2VudGUgZW4gZWwgc2VjdG9yLiBFbCBWQlAgc2Ugb2J0aWVuZSBhIHBhcml0ciBkZSB2YWx1YXIgbGEgdG90YWxpZGFkIGRlIGxhIHByb2R1Y2Npw7NuIGEgbG9zIHByZWNpb3MgZXh0ZXJub3MgbyBkZSByZWZlcmVuY2lhIGludGVybmFjaW9uYWwgeSBjb24gZWwgdGlwbyBkZSBjYW1iaW8gZGUgcGFyaWRhZCAoVENQKSwgcXVlIG1pZGUgbGEgY2FwYWNpZGFkIHJlYWwgZGUgY29tcHJhIGRlIGxhIG1vbmVkYSBuYWNpb25hbC4gU2luIGVtYmFyZ28sIGNvbW8gZWwgQ0kgY29uc3RpdHV5ZSBpbnRlcmNhbWJpb3MgZGUgbWVyY2FuY8OtYXMgcmVhbGl6YWRhcyBlbiBlbCDDoW1iaXRvIG5hY2lvbmFsLCBkaWNoYSBwYXJ0aWRhIHNlIG9idGllbmUgYSBwYXJ0aXIgZGUgbG9zIHZhbG9yZXMgb2J0ZW5pZG9zIGVuIGxhIHNlcmllIGRlIGVtcGFsbWUgQ0NOTi4gRGUgaWd1YWwgbWFuZXJhLCBzZSB1dGlsaXrDsyBsYSBNUyByZXN1bHRhbnRlIGRlIGVzdGEgw7psdGltYSBlc3RpbWFjacOzbi4gDQoNCg0KDQoNCiMjIEZvcm11bGFjacOzbiBtYXRlbcOhdGljYSBkZSBlc3RpbWFjaW9uZXMNCg0KVmFsb3IgQnJ1dG8gZGUgUHJvZHVjY2nDs24gdG90YWwsIGVzdGltYWNpw7NuIGNvbiBjcml0ZXJpbyBwcm9waW8NCiQkVkJQX3twcm9waWF9ID0gKFBleHRfe3BldHLDs2xlb30gKiBRX3twZXRyw7NsZW99ICsgUGV4dF97Z2FzfSAqIFFfe2dhc30pICogVENQJCQNCg0KRG9uZGU6IA0KDQoqICRWQlBfe3Byb3BpYX0kID0gVmFsb3IgQnJ1dG8gZGUgbGEgUHJvZHVjY2nDs24gdG90YWwsIGVzdGltYWNpw7NuIHByb3BpYQ0KKiAkUGV4dF97cGV0csOzbGVvfSQgPSBQcmVjaW8gZGUgZXhwb3J0YWNpw7NuIG8gcmVmZXJlbmNpYSBpbnRlcm5hY2lvbmFsIGRlbCBwZXRyw7NsZW8gY3J1ZG8gKHNlZ8O6biBjb3JyZXNwb25kYSkNCiogJFBleHRfe2dhc30kID0gUHJlY2lvIGRlIGV4cG9ydGFjacOzbiBvIHJlZmVyZW5jaWEgaW50ZXJuYWNpb25hbCBkZWwgZ2FzIG5hdHVyYWwgKHNlZ8O6biBjb3JyZXNwb25kYSkNCiogJFFfe3BldHLDs2xlb30kID0gQ2FudGlkYWRlcyBwcm9kdWNpZGFzIHRvdGFsZXMgZGUgcGV0csOzbGVvIGNydWRvDQoqICRRX3tnYXN9JCA9IENhbnRpZGFkZXMgcHJvZHVjaWRhcyB0b3RhbGVzIGRlIGdhcyBuYXR1cmFsDQoqICRUQ1AkID0gVGlwbyBkZSBDYW1iaW8gZGUgUGFyaWRhZA0KDQoNClZhbG9yIEJydXRvIGRlIFByb2R1Y2Npw7NuIHRvdGFsLCBlc3RpbWFjacOzbiBjb24gY3JpdGVyaW8gQ0NOTg0KJCRWQlBfe0NDTk59ID0gKFBpbnRfe3BldHLDs2xlb30gKiBRTUludF97cGV0csOzbGVvfSArIFBleHRfe3BldHLDs2xlb30gKiBFeHBvX3twZXRyw7NsZW99ICsgUGludF97Z2FzfSAqIFFNSW50X3tnYXN9ICsgUGV4dF97Z2FzfSAqIEV4cG9fe2dhc30pKiBUQ0MkJA0KDQpEb25kZToNCg0KKiAkVkJQX3tDQ05OfSQgPSBWYWxvciBCcnV0byBkZSBsYSBQcm9kdWNjacOzbiB0b3RhbCwgIGVzdGltYWNpw7NuIHByb3BpYSBjb24gY3JpdGVyaW8gZGUgbGFzIENDTk4NCiogJFBpbnRfe3BldHLDs2xlb30kID0gUHJlY2lvIG1lcmNhZG8gaW50ZXJubyBkZWwgcGV0csOzbGVvIGNydWRvDQoqICRQaW50X3tnYXN9JCA9IFByZWNpbyBtZXJjYWRvIGludGVybm8gZGVsIGdhcyBuYXR1cmFsDQoqICRRTUludF97cGV0csOzbGVvfSQgPSBjYW50aWRhZGVzIHZlbmRpZGFzIGFsIG1lcmNhZG8gaW50ZXJubyBkZSBwZXRyw7NsZW8gY3J1ZG8NCiogJFFNSW50X3tnYXN9JCA9IGNhbnRpZGFkZXMgdmVuZGlkYXMgYWwgbWVyY2FkbyBpbnRlcm5vIGRlbCBnYXMgbmF0dXJhbA0KKiAkRXhwb197cGV0csOzbGVvfSQgPSBleHBvcnRhY2lvbmVzIGRlIHBldHLDs2xlbyBjcnVkbw0KKiAkRXhwb197Z2FzfSQgPSBleHBvcnRhY2lvbmVzIGRlIGdhcyBuYXR1cmFsDQoqICRUQ0MkID0gVGlwbyBkZSBDYW1iaW8gQ29tZXJjaWFsDQoNCg0KPGJyPg0KDQpWYWxvciBCcnV0byBkZSBQcm9kdWNjacOzbiBleHRyYWNjacOzbiwgZXN0aW1hY2nDs24gY29uIGNyaXRlcmlvIENDTk4NCg0KJCRWQlBcX2V4dHJfe0NDTk59ID0gVkJQX3tDQ05OfSAqICgxLXByb3BcX3NlcnZpY2lvcykkJA0KDQpEb25kZToNCg0KKiAkVkJQXF9leHRyX3tDQ05OfSQgPSBWYWxvciBCcnV0byBkZSBsYSBQcm9kdWNjacOzbiBleHRyYWNjacOzbiwgIGVzdGltYWNpw7NuIHByb3BpYSBjb24gY3JpdGVyaW8gZGUgbGFzIENDTk4NCiogJHByb3BcX2V4dHIkID0gcHJvcG9yY2nDs24gZGVsIFZCUCBkZSBzZXJ2aWNpb3MgZGUgYXBveW8gc29icmUgVkJQIGRlIGV4dHJhY2Npw7NuIGRlIHBldHLDs2xlbyB5IGdhcw0KDQoNClByb3BvcmNpw7NuIGRlIGxvcyBzZXJ2aWNpb3MgZGUgYXBveW8gc29icmUgbGEgZXh0cmFjY2nDs24gZGUgcGV0csOzbGVvIHkgZ2FzDQo8YnI+DQokJHByb3BcX3NlcnZpY2lvcyA9IFxmcmFje1ZCUFxfc2VydmljaW9zX3tDT1V9fXtWQlBcX2V4dHJfe0NPVX0gKyBWQlBcX3NlcnZpY2lvc197Q09VfX0kJA0KDQpEb25kZToNCg0KKiAkVkJQXF9zZXJ2aWNpb3Nfe0NPVX0kID0gVkJQIGRlIHNlcnZpY2lvcyBkZSBhcG95byBkZWwgQ3VhZHJvIGRlIFV0aWxpemFjacOzbiBkZSBPZmVydGENCiogJFZCUFxfZXh0cmFjY2nDs25fe0NPVX0kID0gVkJQIGRlIGV4dHJhY2Npw7NuIGRlIHBldHLDs2xlbyB5IGdhcyBkZWwgQ3VhZHJvIGRlIFV0aWxpemFjacOzbiBkZSBPZmVydGENCg0KDQoNCjxicj4NCkNvbnN1bW8gSW50ZXJtZWRpbywgdmFsb3JlcyBvZmljaWFsZXMgZGUgbGFzIENDTk4NCiQkIENJX3tDQ05OfSA9IFZCUF97Q0NOTn0gLSAgVkFfe0NDTk59ICQkDQoNCkRvbmRlOg0KDQoqICRDSV97Q0NOTn0kID0gQ29uc3VtbyBJbnRlcm1lZGlvIHRvdGFsLCBlc3RpbWFjacOzbiBwcm9waWENCiogJFZBX3tDQ05OfSQgPSBWYWxvciBBZ3JlZ2FkbywgZXN0aW1hY2nDs24gZGUgbGFzIENDTk4gDQoNCjxicj4NCkNvbnN1bW8gSW50ZXJtZWRpbywgZXN0aW1hY2nDs24gY29uIGNyaXRlcmlvIENDTk4NCiQkIENJX3tDQ05OfSA9IFZCUF97Q0NOTn0gKiAgQ29lZlxfdGVjICQkDQpEb25kZToNCg0KKiAkQ29lZlxfdGVjJCA9IENvZWZpY2llbnRlIHTDqWNuaWNvIGRlIE1hdHJpeiBJbnN1bW8gUHJvZHVjdG8NCg0KPGJyPg0KQ29uc3VtbyBJbnRlcm1lZGlvIGRlIGV4dHJhY2Npw7NuLCBlc3RpbWFjacOzbiBjb24gY3JpdGVyaW8gQ0NOTg0KDQokJCBDSVxfZXh0cl97Q0NOTn0gPSBWQlBcX2V4dHJfe0NDTk59ICogIENvZWZcX3RlYyAkJA0KDQpEb25kZToNCg0KKiAkIENJXF9leHRyX3tDQ05OfSQgPSBDb25zdW1vIEludGVybWVkaW8gZGUgZXh0cmFjY2nDs24sIGVzdGltYWNpw7NuIGNyaXRlcmlvIENDTk4NCg0KPGJyPg0KTWFzYSBTYWxhcmlhbCwgdmFsb3JlcyBvZmljaWFsZXMgZGUgbGFzIENDTk4NCiQkTVMgPSBXICogRW1wICogMTMkJA0KRG9uZGU6IA0KDQoqICRNUyQgPSBNYXNhIFNhbGFyaWFsIA0KKiAkVyQgPSAgU2FsYXJpbyBhbnVhbCBwcm9tZWRpbw0KKiAkRW1wJCA9IEVtcGxlbw0KDQo8YnI+DQpNYXNhIFNhbGFyaWFsLCBlc3RpbWFjacOzbiBjb24gY3JpdGVyaW8gQ0NOTg0KJCRNUyA9ICBWQlBfe0NDTk59ICogIENvZWZcX01TJCQNCg0KRG9uZGU6IA0KDQoqICRDb2VmXF9NUyQgPSBDb2VmaWNpZW50ZSBkZSBsYSBwcm9wb3JjacOzbiBkZSBNUyBzb2JyZSBWQlANCg0KPGJyPg0KTWFzYSBTYWxhcmlhbCBkZSBleHRyYWNjacOzbiwgZXN0aW1hY2nDs24gY29uIGNyaXRlcmlvIENDTk4NCiQkTVNcX2V4dHIgPSAgVkJQXF9leHRyX3tDQ05OfSAqICBDb2VmXF9NUyQkDQoNCkRvbmRlOiANCg0KICAqICRNU1xfZXh0ciQgPSBNYXNhIHNhbGFyaWFsIGRlbCBzZWN0b3IgZXh0cmFjY2nDs24NCg0KPGJyPg0KVmFsb3IgYWdyZWdhZG8sIGVzdGltYWNpw7NuIGNyaXRlcmlvIENDTk4NCiQkVkFfe0NDTk59ICA9IFZCUF97Q0NOTn0g4oCTIENJX3tDQ05OfSAkJA0KRG9uZGU6DQoNCiogJFZBX3tDQ05OfSQgPSBWYWxvciBBZ3JlZ2FkbywgZXN0aW1hY2nDs24gcHJvcGlhIGNvbiBjcml0ZXJpbyBDQ05ODQoNCjxicj4NClZhbG9yIGFncmVnYWRvIGRlIGV4dHJhY2Npw7NuLCBlc3RpbWFjacOzbiBjb24gY3JpdGVyaW8gQ0NOTg0KJCRWQVxfZXh0cl97Q0NOTn0gID0gVkJQXF9leHRyX3tDQ05OfSDigJMgQ0lcX2V4dHJfe0NDTk59ICQkDQoNCkRvbmRlOg0KDQoqICRWQVxfZXh0cl97Q0NOTn0kID0gVmFsb3IgQWdyZWdhZG8gZGUgZXh0cmFjY2nDs24sIGVzdGltYWNpw7NuIHByb3BpYSBjb24gY3JpdGVyaW8gQ0NOTiANCg0KDQo8YnI+DQpWYWxvciBhZ3JlZ2FkbywgZXN0aW1hY2nDs24gY29uIGNyaXRlcmlvIHByb3Bpbw0KJCRWQV97cHJvcGlhfSAgPSBWQlBfe3Byb3BpYX0g4oCTIENJXF9leHRyX3tDQ05OfSAkJA0KDQpEb25kZToNCg0KKiAkVkFfe3Byb3BpYX0kID0gVmFsb3IgQWdyZWdhZG8sIGVzdGltYWNpw7NuIGNvbiBjcml0ZXJpbyBwcm9waW8gDQoNCg0KPGJyPg0KDQpFeGNlZGVudGUgQnJ1dG8gZGUgRXhwbG90YWNpw7NuLCBlc3RpbWFjacOzbiBjb24gY3JpdGVyaW8gQ0NOTg0KJCRFQkVfe0NDTk59ICA9IFZBX3tDQ05OfSDigJMgTVMgICAkJA0KPGJyPg0KDQpFeGNlZGVudGUgQnJ1dG8gZGUgRXhwbG90YWNpw7NuIGRlIGV4dHJhY2Npw7NuLCBlc3RpbWFjacOzbiBjb24gY3JpdGVyaW8gQ0NOTg0KJCRFQkVcX2V4dHJfe0NDTk59ICA9IFZBXF9leHRyX3tDQ05OfSDigJMgTVNcX2V4dHIgICAkJA0KDQo8YnI+DQoNCkV4Y2VkZW50ZSBCcnV0byBkZSBFeHBsb3RhY2nDs24sIGVzdGltYWNpw7NuIGNvbiBjcml0ZXJpbyBwcm9waW8NCiQkRUJFX3twcm9waWF9ICA9IFZBX3twcm9waWF9IOKAkyBNU1xfZXh0ciAgICQkDQoNCkRvbmRlOg0KDQoqICRFQkUkID0gRXhjZWRlbnRlIEJydXRvIGRlIEV4cGxvdGFjacOzbg0KKiAkQ0lcX2V4dHJfe0NDTk59JCA9IENvbnN1bW8gaW50ZXJtZWRpbyBkZWwgc2VjdG9yIGV4dHJhY2Npw7NuLCBlc3RpbWFjacOzbiBjb24gY3JpdGVyaW8gQ0NOTg0KDQoNCjxicj4NCkNvbnN1bW8gZGUgQ2FwaXRhbCBGaWpvLCBlc3RpbWFjacOzbiBjb24gY3JpdGVyaW8gcHJvcGlvDQokJENvbktmaWpvID0gUFB5RSAqICBwcm9tKFxmcmFje0RlcH17UFB5RX0pICQkDQoNCkRvbmRlOiANCg0KKiAkQ29uS2Zpam8kID0gQ29uc3VtbyBkZSBDYXBpdGFsIEZpam8NCiogJFBQeUUkPSBQcm9waWVkYWQsIFBsYW50YSB5IEVxdWlwbyBuZXRhDQoqICRwcm9tKFxmcmFje0RlcH17UFB5RX0pICQgPSAgdGFzYSBkZSBkZXByZWNpYWNpw7NuIHByb21lZGlvDQoqICREZXAkID0gRGVwcmVjaWFjaW9uZXMgKGN1ZW50YSBnYXN0b3MgcG9yIG5hdHVyYWxlemEpDQoNCjxicj4NCg0KUGx1c3ZhbMOtYSAoRXhjZWRlbnRlIE5ldG8gZGUgRXhwbG90YWNpw7NuKSwgZXN0aW1hY2nDs24gY29uIGNyaXRlcmlvIHByb3Bpbw0KJCRQVl97cHJvcGlhfSA9IFZBX3twcm9waWF9IC0gQ29uS2Zpam8gLSBJbXAgJCQNCg0KDQpEb25kZToNCg0KKiAkUFZfe3Byb3BpYX0kID0gUGx1c3ZhbMOtYSAoKkV4Y2VkZW50ZSBOZXRvIGRlIEV4cGxvdGFjacOzbiopDQoqICRJbXAkID0gSW1wdWVzdG9zIG5vcm1hbGVzDQoNCg0KDQojIEZ1ZW50ZXMgcGFyYSBsYSBjb25zdHJ1Y2Npw7NuIGRlIHNlcmllcyBkZSBsYXJnbyBwbGF6bw0KDQoqIFByb2R1Y2Npw7NuIGRlIENydWRvOiANCiAgKyAxOTExIGEgMTk5MjogQW51YXJpbyBkZSBjb21idXN0aWJsZXMgDQogICsgMTk5MyAtIGFjdHVhbGlkYWQ6IFNFU0NPIERvd25zdHJlYW0NCiAgDQoqIEV4cG9ydGFjaW9uZXMgZGUgQ3J1ZG86IA0KICArIDE5NjIgYSAxOTkzOiBVTiBDb210cmFkZSAoY2xhc2lmaWNhY2nDs24gU0lUQyBhcyByZXBvcnRlZCkNCiAgKyAxOTk0IGVuIGFkZWxhbnRlOiBTRVNDTyBEb3duc3RyZWFtDQogICsgTG9zIGRhdG9zIGZhbHRhbnRlcyBkZSBTRVNDTyBzZSBjb21wbGV0YXJvbiBjb24gTUVDT04NCiAgKyBTaWd1ZW4gaGFiaWVuZG8gZGF0b3MgZmFsdGFudGVzIHBhcmEgbG9zIGHDsW9zIDE5NjUsIDE5NzAtNzQsIDE5NzYtNzgsIDE5ODAtODQNCiAgDQoqIFByZWNpbyBNZXJjYWRvIEludGVybm8gZGUgQ3J1ZG86IA0KICArIDE5NjMgYSAxOTY1OiBLb3p1bGogeSBQaXN0b25lc2kgLSBSZXZpc3RhIElERUUgYWp1c3RhZG8gY29uIGVsIMOtbmRpY2UgZGVsIHByZWNpbyBkZWwgQW51YXJpbyBkZSBZUEYgDQogICsgMTk4OSBhIDE5OTE6IEFudWFyaW8gZGUgWVBGDQogICsgMTk2NiBhIDE5ODg6IEtvenVsaiB5IFBpc3RvbmVzaSAtIFJldmlzdGEgSURFRQ0KICArIDE5OTI6IE1FQ09OIGFqdXN0YWRvIGNvbiBsYSB2YXJpYWNpw7NuIGRlbCDDjW5kaWNlIGRlIHByZWNpb3MgaW50ZXJub3MgYWwgcG9yIG1heW9yIChJUElNKQ0KICArIDE5OTMgZW4gYWRlbGFudGU6IE1FQ09OIA0KICANCiogUHJlY2lvIE1lcmNhZG8gRXh0ZXJubyBDcnVkbzoNCiAgKyBlbnRyZSAxOTYyIHkgMTk5MjogcHJlY2lvIGRlIGV4cG9ydGFjacOzbiBhcmdlbnRpbmEgZGUgVU4gQ29tdHJhZGUNCiAgKyBlbnRyZSAxOTkzLTIwMDEgeSAyMDA0LTIwMTQ6IHByZWNpbyBkZSBleHBvcnRhY2nDs24gYXJnZW50aW5hIGRlIE1lY29uDQogICsgZW50cmUgMjAwMiB5IDIwMDM6IHByZWNpbyBkZSBleHBvcnRhY2nDs24gZGUgQXJnZW50aW5hIGRlIFVOIENvbXRyYWRlIChDbGFzaWZpY2FjacOzbiBIUyBhcyByZXBvcnRlZCkgIA0KICArIDIwMTQgZW4gYWRlbGFudGU6IHByZWNpbyBkZSBleHBvcnRhY2nDs24gYXJnZW50aW5hIGRlIFNlY3JldGFyw61hIGRlIEVuZXJnw61hIChSZWdhbMOtYXMpDQogICsgVmFsb3JlcyBmYWx0YW50ZXMgcHJldmlvcyBhIDE5OTI6IEJyZW50ICAoRnVlbnRlOiBJbmZsYXRpb24gRGF0YSkNCiAgDQoqIFByb2R1Y2Npw7NuIGRlIEdhczoNCiAgKyAxOTExIGEgMTk5MjogQW51YXJpbyBkZSBjb21idXN0aWJsZXMgDQogICsgMTk5MyBlbiBhZGVsYW50ZTogU0VTQ08gRG93bnN0cmVhbQ0KICANCiogRXhwb3J0YWNpb25lcyBkZSBnYXM6IA0KICArIDE5NjIgYSAxOTk2OiBVTiBDb210cmFkZSwNCiAgKyAxOTk3IGVuIGFkZWxhbnRlOiBTRVNDTyBEb3duc3RyZWFtDQogICsgRGF0b3MgZmFsdGFudGVzIHBhcmEgbG9zIGHDsW9zIDE5OTkgeSAyMDAwDQogIA0KKiBQcmVjaW8gTWVyY2FkbyBJbnRlcm5vIGRlIGdhczoNCiAgKyAxOTYzIC0gMTk2OSAmIDE5ODkgLSAxOTkyOiBBbnVhcmlvIGRlIFlQRg0KICArIDE5NzAgLSAxOTg4OiAgS296dWxqIHkgUGlzdG9uZXNpIC0gUmV2aXN0YSBJREVFDQogICsgMTk5MyBlbiBhZGVsYW50ZTogU2VjcmV0YXLDrWEgZGUgRW5lcmfDrWEgLSBCYXNlIFJlZ2Fsw61hcw0KICANCiogUHJlY2lvIE1lcmNhZG8gRXh0ZXJubzoNCiAgKyBBw7FvcyAxOTY0IHkgMTk2NTogUHJlY2lvIGRlIGltcG9ydGFjacOzbiBkZSBnYXMgcHJvdmVuaWVudGUgZGUgQm9saXZpYSBoYWNpYSBBcmdlbnRpbmEgZGUgVU4gQ29tdHJhZGUNCiAgKyAxOTY2IGVuIGFkZWxhbnRlOiBQcmVjaW8gZGUgZXhwb3J0YWNpb24gZGUgZ2FzIGRlc2RlIEJvbGl2aWEgYSBBcmdlbnRpbmEgZGUgVU4gQ29tdHJhZGUNCiAgKyBEYXRvcyBmYWx0YW50ZXMgcGFyYSBsb3MgYcOxb3MgcHJldmlvcyBhIDE5NjMgeSBwZXLDrW9kbyAxOTY4LTE5NzEgDQoNCiogVmFsb3IgQnJ1dG8gZGUgbGEgUHJvZHVjY2nDs24sIFZhbG9yIEFncmVnYWRvIHkgQ29uc3VtbyBJbnRlcm1lZGlvOg0KICArIElOREVDIC0gRGlyZWNjacOzbiBOYWNpb25hbCBkZSBDdWVudGFzIE5hY2lvbmFsZXMgKEJhc2UgTWluZXLDrWEgZSBIaWRyb2NhcmJ1cm9zIGRlIGxhcyBDdWVudGFzIE5hY2lvbmFsZXMpLiBMYXMgdmFyaWFibGVzICJleHRyYWNjaW9uX3lfc2VydmljaW9zX2hpZHJvY2FyYnVyb3MiIHJlZmllcmVuIGEgIkV4dHJhY2Npw7NuIGRlIHBldHLDs2xlbyBjcnVkbyB5IGdhcyBuYXR1cmFsLiBBY3RpdmlkYWRlcyBkZSBzZXJ2aWNpb3MgcmVsYWNpb25hZGFzIGNvbiBsYSBleHRyYWNjacOzbiBkZSBwZXRyw7NsZW8geSBnYXMsIGV4Y2VwdG8gbGFzIGFjdGl2aWRhZGVzIGRlIHByb3NwZWNjacOzbiINCiAgKyBDw6FsY3VsbyBwcm9waW8gZGVsIFZCUCBjb24gZGF0b3MgZGF0b3MgZGUgcHJvZHVjY2nDs24geSBwcmVjaW8gaW50ZXJuYWNpb25hbCByZWNvcGlsYWRvcy4gTGFzIGZ1ZW50ZXMgc29uIGxhcyBzaWd1aWVudGVzIChsb3MgY3JpdGVyaW9zIHNvbiBsb3MgbWlzbW9zIHBhcmEgbGEgdXRpbGl6YWNpw7NuIHBvc3RlcmlvciBlbiBlbCBjw6FsY3VsbyBkZSByZW50YSBkZSBsYSB0aWVycmEgaGlkcm9jYXJidXLDrWZlcmEgcG9yIGRpZmVyZW5jaWFsIGRlIHByZWNpb3MsIHNvYnJldmFsdWFjacOzbiBjYW1iaWFyaWEgeSBvdHJvcyBtZWNhbmlzbW9zKQ0KDQoqIFNhbGFyaW8geSBlbXBsZW8NCiAgKyAxOTYwLTE5OTY6IGVzdGltYWNpw7NuIGEgcGFydGlyIGRlIGFwbGljYWNpw7NuIGRlbCBjb2VmaWNpZW50ZSBkZSBwcm9wb3JjacOzbiBkZSBsYSBtYXNhIHNhbGFyaWFsIHNvYnJlIGVsIFZCUA0KICArIDE5OTYgZW4gYWRlbGFudGU6IE1pbmlzdGVyaW8gZGUgVHJhYmFqbywgRW1wbGVvIHkgU2VndXJpZGFkIFNvY2lhbCAtIE9ic2VydmF0b3JpbyBkZSBFbXBsZW8geSBEaW7DoW1pY2EgRW1wcmVzYXJpYWwgKE9FREUpDQoNCiogQ29uc3VtbyBkZSBjYXBpdGFsIGZpam8NCiAgKyBDb2VmaWNpZW50ZSBkZSBkZXByZWNpYWNpw7NuIGVzdGltYWRvIGEgcGFydGlyIGRlIEVzdGFkb3MgQ29udGFibGVzIGRlIFlQRiAoMTk5OC0yMDE4KQ0KPGJyPg0KDQoNCg0KDQrCt8K3wrfCt8K3wrfCt8K3wrfCt8K3wrfCt8K3wrfCt8K3wrfCt8K3wrfCt8K3DQoqIENyaXRlcmlvIGRlIGPDs21wdXRvIGRlIGxhIHByb2R1Y2Npw7NuIGRlIGdhczoNCiAgKyAxOTExIGEgMTk5MjogQW51YXJpbyBkZSBjb21idXN0aWJsZXMgDQogICsgMTk5MyBlbiBhZGVsYW50ZTogU0VTQ08gRG93bnN0cmVhbQ0KICANCiAgKiBDcml0ZXJpbyBkZSBjw7NtcHV0byBwYXJhIHByb2R1Y2ljw7NuIGRlIGNydWRvOiANCiAgKyAxOTExIGEgMTk5MjogQW51YXJpbyBkZSBjb21idXN0aWJsZXMgDQogICsgMTk5MyAtIGFjdHVhbGlkYWQ6IFNFU0NPIERvd25zdHJlYW0NCiAgDQoqIENyaXRlcmlvIHBhcmEgcHJlY2lvX2NydWRvOiANCiAgKyAxOTYzIGEgMTk2NTogS296dWxqIHkgUGlzdG9uZXNpIC0gUmV2aXN0YSBJREVFIGFqdXN0YWRvIGNvbiBlbCDDrW5kaWNlIGRlbCBwcmVjaW8gZGVsIEFudWFyaW8gZGUgWVBGIA0KICArIDE5ODkgYSAxOTkxOiBBbnVhcmlvIGRlIFlQRg0KICArIDE5NjYgYSAxOTg4OiBLb3p1bGogeSBQaXN0b25lc2kgLSBSZXZpc3RhIElERUUNCiAgKyAxOTkyOiBNRUNPTiBhanVzdGFkbyBjb24gbGEgdmFyaWFjacOzbiBkZWwgw41uZGljZSBkZSBwcmVjaW9zIGludGVybm9zIGFsIHBvciBtYXlvciAoSVBJTSkNCiAgKyAxOTkzIGVuIGFkZWxhbnRlOiBNRUNPTiANCiANCg0KKiBQcmVjaW8gTWVyY2FkbyBJbnRlcm5vIGRlIGdhczoNCiAgKyAxOTYzIC0gMTk2OSAmIDE5ODkgLSAxOTkyOiBBbnVhcmlvIGRlIFlQRg0KICArIDE5NzAgLSAxOTg4OiAgS296dWxqIHkgUGlzdG9uZXNpIC0gUmV2aXN0YSBJREVFDQogICsgMTk5MyBlbiBhZGVsYW50ZTogU2VjcmV0YXLDrWEgZGUgRW5lcmfDrWEgLSBCYXNlIFJlZ2Fsw61hcw0KICArIEHDsW9zIGZhbHRhbnRlczogWy4uLl0NCiAgDQoNCiogRnVlbnRlcyBzZWxlY2Npb25hZGFzIHBhcmEgZWwgcHJlY2lvIGRlIHJlZmVyZW5jaWEgZGUgY3J1ZG86IA0KICArIGVudHJlIDE5NjIgeSAxOTkyOiBwcmVjaW8gZGUgZXhwb3J0YWNpw7NuIGFyZ2VudGluYSBkZSBVTiBDb210cmFkZSAoY2xhc2lmaWNhY2nDs24gU0lUQyBhcyByZXBvcnRlZCkNCiAgKyBlbnRyZSAxOTkzLTIwMDEgeSAyMDA0LTIwMTQ6IHByZWNpbyBkZSBleHBvcnRhY2nDs24gYXJnZW50aW5hIGRlIE1lY29uDQogICsgZW50cmUgMjAwMiB5IDIwMDM6IHByZWNpbyBkZSBleHBvcnRhY2nDs24gZGUgQXJnZW50aW5hIGRlIFVOIENvbXRyYWRlIChDbGFzaWZpY2FjacOzbiBIUyBhcyByZXBvcnRlZCkNCiAgKyAyMDE0IGVuIGFkZWxhbnRlOiBwcmVjaW8gZGUgZXhwb3J0YWNpw7NuIGFyZ2VudGluYSBkZSBTZWNyZXRhcsOtYSBkZSBFbmVyZ8OtYSAoUmVnYWzDrWFzKQ0KICArIFZhbG9yZXMgZmFsdGFudGVzIHByZXZpb3MgYSAxOTkyICgxOTcwIC0gMTk4NSk6IEJyZW50IChGdWVudGU6IEluZmxhdGlvbiBEYXRhKQ0KDQoNCiogQ3JpdGVyaW8gZGUgcHJlY2lvX2V4dGVybm9fZ2FzOg0KICArIEHDsW9zIDE5NjQgeSAxOTY1OiBQcmVjaW8gZGUgaW1wb3J0YWNpw7NuIGRlIGdhcyBwcm92ZW5pZW50ZSBkZSBCb2xpdmlhIGhhY2lhIEFyZ2VudGluYSBkZSBVTiBDb210cmFkZQ0KICArIDE5NjYgZW4gYWRlbGFudGU6IFByZWNpbyBkZSBleHBvcnRhY2lvbiBkZSBnYXMgZGVzZGUgQm9saXZpYSBhIEFyZ2VudGluYSBkZSBVTiBDb210cmFkZQ0KICArIERhdG9zIGZhbHRhbnRlcyBwYXJhIGxvcyBhw7FvcyBwcmV2aW9zIGEgMTk2MyB5IHBlcsOtb2RvIDE5NjgtMTk3MQ0KICANCg0KKiBFeHBvcnRhY2lvbmVzIGRlIGNydWRvOiANCiAgKyAxOTYyIGEgMTk5MzogVU4gQ29tdHJhZGUNCiAgKyAxOTk0IGVuIGFkZWxhbnRlOiBTRVNDTyBEb3duc3RyZWFtDQogICsgTG9zIGRhdG9zIGZhbHRhbnRlcyBkZSBTRVNDTyBzZSBjb21wbGV0YXJvbiBjb24gTUVDT04NCiAgKyBTaWd1ZW4gaGFiaWVuZG8gZGF0b3MgZmFsdGFudGVzIHBhcmEgbG9zIGHDsW9zIDE5NjUsIDE5NzAtNzQsIDE5NzYtNzgsIDE5ODAtODQNCg0KDQoqIEZ1ZW50ZXMgc2VsZWNjaW9uYWRhczoNCiArIDE5NjIgYSAxOTk2OiBVTiBDb210cmFkZSwNCiArIDE5OTcgZW4gYWRlbGFudGU6IFNFU0NPIERvd25zdHJlYW0NCiArIERhdG9zIGZhbHRhbnRlcyBwYXJhIGxvcyBhw7FvcyAxOTk5IHkgMjAwMA0KDQoNCmBgYHtyfQ0KdmFsb3JfdG90YWxfcHJvZHVjY2lvbiA9IHJlYWQuY3N2KCIuLi9yZXN1bHRhZG9zL2RhdGFfdml6L3ZhbG9yX3RvdGFsX3Byb2R1Y2Npb24uY3N2IikNCmdyYWZfdmFsb3JfcHJvZHVjY2lvbiA8LSB2YWxvcl90b3RhbF9wcm9kdWNjaW9uICU+JQ0KICBmaWx0ZXIoYW5pbyA+IDE5NjApICU+JQ0KICBnZ3Bsb3QoIGFlcyhhbmlvLCB2YWxvciwgY29sb3IgPSBmdWVudGUpKSsNCiAgZ2VvbV9saW5lKGFscGhhID0gMC43KSsNCiAgZ2VvbV9wb2ludChzaXplID0gMC40MzUsIGFscGhhID0gMC4yKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikrDQogIGxhYnModGl0bGUgPSAiVmFsb3IgZGUgbGEgUHJvZHVjY2nDs24gaGlkcm9jYXJidXLDrWZlcmEiLA0KICAgICAgIHN1YnRpdGxlID0gIlZhbG9yIHRvdGFsIHkgY29tcG9uZW50ZXMiLA0KICAgICAgIHkgPSAiTWlsbG9uZXMgZGUgcGVzb3MgZGUgMjAxOCIpKw0KICBmYWNldF93cmFwKH52YXJpYWJsZSkNCmdwIDwtIGdncGxvdGx5KGdyYWZfdmFsb3JfcHJvZHVjY2lvbikjLCB3aWR0aCA9IDc1MCwgaGVpZ2h0ID0gNzAwKQ0KZ3BbWyd4J11dW1snbGF5b3V0J11dW1snYW5ub3RhdGlvbnMnXV1bWzJdXVtbJ3gnXV0gPC0gLTAuMTENCmdwICU+JSBsYXlvdXQobWFyZ2luID0gbGlzdChsID0gNzUpKQ0KYGBgDQoNCg0KIyBSZW50YSBkZSBsYSB0aWVycmEgaGlkcm9jYXJidXLDrWZlcmEgdG90YWwuIEVuIHByZWNpb3MgY29uc3RhbnRlcywgc29icmUgUGx1c3ZhbMOtYSBUb3RhbCB5IFBCSQ0KDQpFeGlzdGVuIGRvcyBjYW1pbm9zIHBhcmEgbGxlZ2FyIGFsIG1vbnRvIHRvdGFsIGRlIHJlbnRhIGRlIGxhIHRpZXJyYSBoaWRyb2NhcmJ1csOtZmVyYTogdW5vIGVzIGRlc2NvbnRhbmRvIGxhIGdhbmFuY2lhIG5vcm1hbCBkZSBsYXMgZW1wcmVzYXMgYSBsYSBwbHVzdmFsw61hIHRvdGFsIGRlbCBzZWN0b3IgeSBlbCBvdHJvIGVzIHBvciBtZWRpbyBkZSBsYSBzdW1hIGRlIG1lY2FuaXNtb3MgZGUgYXByb3BpYWNpw7NuLg0KDQokJFJlbnRhXF9oaWRyb2NhcmJ1csOtZmVyYSA9IFBWX3toaWRyb2NhcmJ1csOtZmVyYX0gLSBHY2lhXF9Ob3JtYWxfe2hpZHJvY2FyYnVyw61mZXJhfSQkDQoNCkRvbmRlOg0KDQoqICRHY2lhXF9Ob3JtYWxfe2hpZHJvY2FyYnVyw61mZXJhfSQgPSBHYW5hbmNpYSBOb3JtYWwgZGVsIHNlY3RvciBoaWRyb2NhcmJ1csOtZmVybw0KKiAkUFZfe2hpZHJvY2FyYnVyw61mZXJhfSQgPSBQbHVzdmFsw61hIGRlbCBzZWN0b3IgaGlkcm9jYXJidXLDrWZlcm8gIA0KDQokJEdjaWFcX05vcm1hbF97aGlkcm9jYXJidXLDrWZlcmF9ID0gS1RBX3toaWRyb2NhcmJ1csOtZmVyb30gKiBUR197cmVmZXJlbmNpYX0kJA0KDQoNCkRvbmRlOg0KDQoqICRLVEFfe2hpZHJvY2FyYnVyb3N9JCA9IFN0b2NrIGRlIGNhcGl0YWwgYWRlbGFudGFkbyBkZWwgc2VjdG9yIGhpZHJvY2FyYnVyw61mZXJvIA0KKiAkVEdfe3JlZmVyZW5jaWF9JCA9IFRhc2EgZGUgZ2FuYW5jaWEgbm9ybWFsIGRlIHJlZmVyZW5jaWEuDQoNCkVuIGVzdGUgY2Fzbywgc2VsZWNjaW9uYW1vcyBsYSB0YXNhIGRlIGdhbmFuY2lhIGRlbCBzZWN0b3IgaW5kdXN0cmlhbCBjb21vIHBhcsOhbWV0cm8gcGFyYSBkaWZlcmVuY2lhciBsYSByZW50YSBkZSBsYSBnYW5hbmNpYS4gQSBzdSB2ZXosIHBhcmEgZWwgY2FwaXRhbCB0b3RhbCBhZGVsYW50YWRvIGRlIGxhcyBlbXByZXNhcyBoaWRyb2NhcmJ1csOtZmVyYXMsIHNlbGVjY2lvbmFtb3MgdW5pY2FtZW50ZSBlbCB2YWxvciByZXN1bHRhbnRlIGRlIGxhIGVzdGltYWNpw7NuIGRlIGxhIFBQeUUgZGUgQm9sc2FyLCBwb3IgbG8gcXVlIGxlIGZhbHRhbiBsb3MgaW52ZW50YXJpb3MgeSBzYWxhcmlvcyBhZGVsYW50YWRvcy4NCg0KRWwgY8OhbGN1bG8gZGUgcmVudGEgdG90YWwgaGlkcm9jYXJidXLDrWZlcmEgcXVlIHNlIG9idGllbmUgcG9yIG1lZGlvIGRlIGRlc2NvbnRhciBsYSBnYW5hbmNpYSBub3JtYWwgYSBsYSBwbHVzdmFsw61hIHRvdGFsIGRlbCBzZWN0b3IsIGRlYmUgc2VyIGlndWFsIGEgbGEgcmVudGEgb2J0ZW5pZGEgcG9yIG1lZGlvIGRlIGxhIGFncmVnYWNpw7NuIGRlIGxvcyBkaXN0aW50b3MgbWVjYW5pc21vcyBkZSBhcHJvcGlhY2nDs24uIEVzIGRlY2lyOg0KDQokJFJlbnRhXF9oaWRyb2NhcmJ1csOtZmVyYSA9IFJlbnRhXF9kaWZlcmVuY2lhbFxfcHJlY2lvcyArIFJlbnRhXF9zb2JyZXZhbHVhY2nDs24gKyBSZW50YVxfZW1wcmVzYXMgKyBJbXB1ZXN0b3NcX25ldG9zXF9lc3BlY8OtZmljb3MgJCQNCiQkSW1wdWVzdG9zXF9uZXRvc1xfZXNwZWPDrWZpY29zID0gUmV0ZW5jaW9uZXMgKyBSZWdhbMOtYXMgLSBTdWJzaWRpb3MkJA0KDQojIyBSZW50YSBkZSBsYSB0aWVycmEgY2FsY3VsYWRhIGEgcGFydGlyIGRlIGRlc2N1ZW50b3Mgc29icmUgZWwgdmFsb3IgYnJ1dG8gZGUgcHJvZHVjY2nDs24gKG3DqXRvZG8gZGlyZWN0bykNCmBgYHtyfQ0KZ3JhZl9yZW50YV9kaXJlY3RvX3BiaSA8LSByZW50YV9kaXJlY3RvX3BiaSAlPiUNCiAgc2VsZWN0KGFuaW8sIHJlbnRhX3B2LHJlbnRhX3BiaSApICU+JQ0KICAjIGZpbHRlcihhbmlvID49IDE5NjIsIGZ1ZW50ZV9nY2lhID09ICJQcm9waWEiKSAlPiUNCiAgZmlsdGVyKGFuaW8gPj0gMTk2MikgJT4lDQogIGdhdGhlcihrZXkgPSB0aXBvX3JlbnRhLA0KICAgICAgICAgdmFsdWUgPSB2YWxvciwNCiAgICAgICAgIDI6MykgJT4lDQogIGdncGxvdChhZXMoYW5pbywgdmFsb3IpKSsNCiAgIyBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpKw0KICBnZW9tX2xpbmUoKSsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsDQogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkrDQogIGxhYnModGl0bGUgPSAiUmVudGEgaGlkcm9jYXJidXLDrWZlcmEgdG90YWwgc29icmUgUEJJIHkgR2FuYW5jaWFzIFRvdGFsZXMiLA0KICAgICAgIHN1YnRpdGxlID0gIkEgcGFydGlyIGRlIGVzdGltYWNpw7NuIHByb3BpYSBkZWwgVkJQIiwNCiAgICAgICB5ID0gIiUiKSsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscz1zY2FsZXM6OnBlcmNlbnRfZm9ybWF0KGFjY3VyYWN5ID0gMikpKw0KICBmYWNldF9ncmlkKH50aXBvX3JlbnRhICkNCmdyYWZfcmVudGFfZGlyZWN0b19wYmkNCiMgZ2dwbG90bHkoZ3JhZl9yZW50YV9kaXJlY3RvX3BiaSwgaGVpZ2h0ID0gNDAwLCB3aWR0aCA9IDYwMCkNCg0KYGBgDQoNCg0KIyMgUmVudGEgZGUgbGEgdGllcnJhIGNhbGN1bGFkYSBhIHBhcnRpciBkZSBzdW1hIGRlIG1lY2FuaXNtb3MgZGUgYXByb3BpYWNpw7NuIChtw6l0b2RvIGluZGlyZWN0bykNCg0KIyMjIEltcHVlc3RvcyB5IHN1YnNpZGlvcw0KDQojIyMjIFJlZ2FsaWFzDQoNCiMjIyMgUmV0ZW5jaW9uZXMNCg0KIyMjIyBTdWJzaWRpb3MNCg0KYGBge3J9DQojICMjIyMjIyBwcm9wb3JjaW9uIHN1YnNpZGlvcyAodmllbmUgZGVsIHNjcmlwdCBwcmVwcm9jZXNhbWllbnRvKQ0KIyByZW50YV9pbmRpcmVjdG9bLGMoImFuaW8iLCJwcm9wb3JjaW9uX3N1YnNpZGlvcyIpXSAlPiUgYXJyYW5nZSgtYW5pbykNCiMgcmVudGFfZGlyZWN0byAlPiUNCiMgICBtdXRhdGUocGVzb19zdWJzaWRpb3MgPSBzdWJzaWRpb3MvcmVudGFfdG90YWwsDQojICAgICAgICAgIG1ldG9kbyA9ICJEaXJlY3RvIikgJT4lDQojICAgICAgICAgIHNlbGVjdChhbmlvLCBtZXRvZG8sIHBlc29fc3Vic2lkaW9zLCByZW50YV90b3RhbCkgJT4lDQojICAgcmJpbmQocmVudGFfaW5kaXJlY3RvICU+JQ0KIyAgICAgICAgICAgbXV0YXRlKHBlc29fc3Vic2lkaW9zID0gc3Vic2lkaW9zL3JlbnRhX3RvdGFsLA0KIyAgICAgICAgICAgICAgICAgIG1ldG9kbyA9ICJJbmRpcmVjdG8iKSAlPiUNCiMgICAgICAgICAgIHNlbGVjdChhbmlvLG1ldG9kbywgIHBlc29fc3Vic2lkaW9zLCByZW50YV90b3RhbCkpICU+JQ0KIyAgIGZpbHRlcihhbmlvID4gMjAwNCkgJT4lDQojICAgcmVzaGFwZTI6Om1lbHQoaWQudmFycyA9IGMoImFuaW8iLCAibWV0b2RvIikpICU+JQ0KIyAgIGdncGxvdChhZXMoYW5pbywgdmFsdWUsIGNvbG9yID0gbWV0b2RvKSkrDQojICAgZ2VvbV9saW5lKCkrDQojIGZhY2V0X3dyYXAofnZhcmlhYmxlLHNjYWxlcz0gImZyZWUiKQ0KYGBgDQoNCg0KIyMjIFN1bWEgZGUgbWVjYW5pc21vcyANCmBgYHtyfQ0KcmVudGFfbWVjYW5pc21vcyA9IGFzLmRhdGEudGFibGUocmVhZF9leGNlbCgiLi4vcmVzdWx0YWRvcy9hcmdlbnRpbmEvcmVudGFfZGVfbGFfdGllcnJhX2hpZHJvY2FyYnVyaWZlcmFfYXJnLnhsc3giLCBzaGVldCA9ICJSVFBHX21lY2FuaXNtb3MiKSkNCiANCnJlbnRhX21lY2FuaXNtb3MgPSByZW50YV9tZWNhbmlzbW9zWywhYygiUnR0IiwgIklQQ18xOCIsICJ1bmlkYWQiKSwgd2l0aCA9IEZdIA0KcmVudGFfbWVjYW5pc21vc1ssIFN1YnMgOj0gU3VicyAqLTFdDQpyZW50YV9tZWNhbmlzbW9zID0gbWVsdChyZW50YV9tZWNhbmlzbW9zLCBpZC52YXJzID0gImFuaW8iLA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUubmFtZSA9ICJ0aXBvX3JlbnRhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLm5hbWUgPSAidmFsb3IiKQ0KcmVudGFfbWVjYW5pc21vcyA9IFJlZHVjZShtZXJnZV9mdW5jLCBsaXN0KHJlbnRhX21lY2FuaXNtb3MsIHRjcF9hcmcsIGlwY191cykpDQpyZW50YV9tZWNhbmlzbW9zWywgdmFsb3IgOj0gKCh2YWxvci8xZTYpL1RDcCkvaXBjX3VzXzIwXQ0KcmVudGFfbWVjYW5pc21vc1ssIHVuaWRhZCA6PSAiTWlsbG9uZXMgZGUgVVNEIFRDcCBkZSAyMDIwIl0NCg0KcmVudGFfcGxvdDMgPSBnZ3Bsb3QocmVudGFfbWVjYW5pc21vcywgYWVzKGFuaW8sIHZhbG9yLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSB0aXBvX3JlbnRhLCBmaWxsID0gdGlwb19yZW50YSkpKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJzdGFjayIpKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikrDQogIGxhYnModGl0bGUgPSAiUmVudGEgZGUgbGEgdGllcnJhIGhpZHJvY2FyYnVyw61mZXJhIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJDdXJzb3MgZGUgYXByb3BpYWNpw7NuIiwNCiAgICAgICB5ID0gIk1pbGxvbmVzIFVTRCBUQ2MgZGUgMjAyMCIpKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDE5NjAsIDIwMjAsIDUpKSsNCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA1MDAwMCwgMTAwMDApLA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzPWZ1bmN0aW9uKHgpIGZvcm1hdCh4LCBiaWcubWFyayA9ICIuIiwgc2NpZW50aWZpYyA9IEZBTFNFKSkrDQogIHRoZW1lX2NsYXNzaWMoKQ0KcmVudGFfcGxvdDMgPSBwbG90X3RoZW1lKHJlbnRhX3Bsb3QzKSt0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3Q9IDAuNywgaGp1c3Q9IDAuNSkpDQpyZW50YV9wbG90Mw0KZ2dzYXZlKCIuLi9yZXN1bHRhZG9zL2FyZ2VudGluYS9yZW50YV9tZWNhbmlzbW9zX3RjcC5wbmciLHJlbnRhX3Bsb3QzKQ0KYGBgDQoNCg0KDQojIENvbXBhcmFjacOzbiBkZSBlc3RpbWFjaW9uZXMgcHJvcGlhcw0KDQpgYGB7cn0NCnJlbnRhX3BleHRxID0gcmVhZF9leGNlbCgiLi4vcmVzdWx0YWRvcy9hcmdlbnRpbmEvcmVudGFfZGVfbGFfdGllcnJhX2hpZHJvY2FyYnVyaWZlcmFfYXJnLnhsc3giLCBzaGVldCA9ICJSVFBHX1BleHRRIikgJT4lIA0KICBzZWxlY3QoYW5pbyAsdW5pZGFkLCB2YWxvciA9IFJ0dCkgJT4lIA0KICBtdXRhdGUodmFyID0gIlJlbnRhIHBvciBkZXNjdWVudG9zIHNvYnJlIHBsdXN2YWzDrWEiKQ0KDQpyZW50YV9tZWNhbmlzbW9zID0gcmVhZF9leGNlbCgiLi4vcmVzdWx0YWRvcy9hcmdlbnRpbmEvcmVudGFfZGVfbGFfdGllcnJhX2hpZHJvY2FyYnVyaWZlcmFfYXJnLnhsc3giLCBzaGVldCA9ICJSVFBHX21lY2FuaXNtb3MiKSAlPiUgDQogIHNlbGVjdChhbmlvICx1bmlkYWQsIHZhbG9yID0gUnR0KSAlPiUgDQogIG11dGF0ZSh2YXIgPSAiUmVudGEgcG9yIHN1bWEgZGUgbWVjYW5pc21vcyIpDQoNCg0KcmVudGFfYXJnID0gYXMuZGF0YS50YWJsZShyYmluZChyZW50YV9wZXh0cSwgcmVudGFfbWVjYW5pc21vcykpDQoNCm1lcmdlX2Z1bmMgPC0gZnVuY3Rpb24oLi4uKSBtZXJnZSguLi4sIGFsbC54ID0gVCwgYnkgPSAiYW5pbyIpDQoNCnJlbnRhX3VzZCA9IFJlZHVjZShtZXJnZV9mdW5jLCBsaXN0KHJlbnRhX2FyZywgdGNwX2FyZywgaXBjX3VzKSkNCnJlbnRhX3VzZFssIHZhbG9yIDo9ICgodmFsb3IvMWU2KS9UQ3ApL2lwY191c18yMF0NCnJlbnRhX3VzZFssIHVuaWRhZCA6PSAiTWlsbG9uZXMgZGUgVVNEIFRDcCBkZSAyMDIwIl0NCiMgcmVudGFfdXNkID0gbWVyZ2UocmVudGFfdXNkLCB0Y3BfYXJnLCBieSA9ICJhbmlvIiwgYWxsLng9IFQpDQoNCnJlbnRhX3Bsb3QxID0gZ2dwbG90KHJlbnRhX3VzZFthbmlvID4gMTk5NV0sIGFlcyhhbmlvLCB2YWxvciwgY29sb3IgPSB2YXIpKSsNCiAgZ2VvbV9saW5lKCkrDQogIGxhYnModGl0bGUgPSAiUmVudGEgaGlkcm9jYXJidXLDrWZlcmEgdG90YWwgZGUgQXJnZW50aW5hIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJDb21wYXJhY2nDs24gZGUgZXN0aW1hY2lvbmVzIHByb3BpYXMiLA0KICAgICAgIHkgPSAiTWlsbG9uZXMgZGUgVVNEIFRDcCBkZSAyMDIwIikrDQogICMgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA2MCoxZTQsIDEwKjFlNCkpDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNjAwMDAsIDEwMDAwKSkNCnJlbnRhX3Bsb3QxID0gcGxvdF90aGVtZShyZW50YV9wbG90MSkrdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpKQ0KDQpnZ3NhdmUoIGZpbGVuYW1lID0gIi4uL3Jlc3VsdGFkb3MvYXJnZW50aW5hL3JlbnRhX21lY2FuaXNtb3NfeV9weHFfQVJHLnBuZyIsIA0KICAgICAgICByZW50YV9wbG90MSwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gMTApDQpyZW50YV9wbG90MQ0KYGBgDQoNCg0KYGBge3J9DQpyZW50YV9wZXh0cV9wYmkgPSByZWFkX2V4Y2VsKCIuLi9yZXN1bHRhZG9zL2FyZ2VudGluYS9yZW50YV9kZV9sYV90aWVycmFfaGlkcm9jYXJidXJpZmVyYV9hcmcueGxzeCIsIHNoZWV0ID0gIlJUUEdfUGV4dFFfdnNfcGliIikgJT4lIA0KICBtdXRhdGUodmFyID0gIlJlbnRhIHBvciBkZXNjdWVudG9zIHNvYnJlIHBsdXN2YWzDrWEiKQ0KDQpyZW50YV9tZWNhbmlzbW9zX3BiaSA9IHJlYWRfZXhjZWwoIi4uL3Jlc3VsdGFkb3MvYXJnZW50aW5hL3JlbnRhX2RlX2xhX3RpZXJyYV9oaWRyb2NhcmJ1cmlmZXJhX2FyZy54bHN4Iiwgc2hlZXQgPSAiUlRQR19tZWNhbmlzbW9zX3ZzX3BpYiIpICU+JSANCiAgbXV0YXRlKHZhciA9ICJSZW50YSBwb3Igc3VtYSBkZSBtZWNhbmlzbW9zIikNCg0KcmVudGFfcGJpID0gYXMuZGF0YS50YWJsZShyYmluZChyZW50YV9wZXh0cV9wYmksIHJlbnRhX21lY2FuaXNtb3NfcGJpKSkNCnJlbnRhX3BiaSA9IHJlbnRhX3BiaVssICEidW5pZGFkIiwgd2l0aD1GXQ0KcmVudGFfcGJpID0gbWVsdChyZW50YV9wYmksIGlkLnZhcnMgPSBjKCJhbmlvIiwgInZhciIpKQ0KDQpyZW50YV9wbG90MiA9IGdncGxvdChyZW50YV9wYmksIGFlcyhhbmlvLCB2YWx1ZSwgY29sb3IgPSB2YXIpKSsNCiAgZ2VvbV9saW5lKCkrDQogIGZhY2V0X3dyYXAofnZhcmlhYmxlLCBuY29sID0xKSsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAyKSkrDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTk2MCwgMjAyMCwgNSkpDQpyZW50YV9wbG90MiA9IHBsb3RfdGhlbWUocmVudGFfcGxvdDIpK3RoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdD0gMC43LCBoanVzdD0gMC41KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSkNCnJlbnRhX3Bsb3QyDQpgYGANCg0KDQoNCg0KIyBDb21wYXJhY2nDs24gY29uIGVzdGltYWNpw7NuIGRlIG90cm9zIGF1dG9yZXMNCmBgYHtyfQ0KI2NhcmdvIHJlbnRhIGF1dG9yZXMNCnJlbnRhX2F1dG9yZXMgPC0gZnJlYWQoIi4uL3Jlc3VsdGFkb3MvYXJnZW50aW5hL3JlbnRhX2F1dG9yZXMuY3N2IikgDQpyZW50YV9hdXRvcmVzID0gbWVyZ2UocmVudGFfYXV0b3JlcywgaXBjX3VzLCBhbGwueD1ULCBieSA9ICJhbmlvIikNCnJlbnRhX2F1dG9yZXNbLCB2YWxvciA6PSB2YWxvciAvaXBjX3VzXzIwXQ0KcmVudGFfYXV0b3Jlc1ssIHVuaWRhZCA6PSAiTWlsbG9uZXMgZGUgVVNEIFRDYyBkZSAyMDIwIl0NCnJlbnRhX2F1dG9yZXMgPSByZW50YV9hdXRvcmVzWywhImlwY191c18yMCIsIHdpdGg9Rl0NCnJlbnRhX2F1dG9yZXMgPSBtZXJnZShyZW50YV9hdXRvcmVzLCB0Y3BfYXJnLCBhbGwueD0gVCwgYnkgPSAiYW5pbyIpDQpyZW50YV9hdXRvcmVzWyx2YWxvciA6PSAodmFsb3IqVENjKS9UQ3BdDQpyZW50YV9hdXRvcmVzPSByZW50YV9hdXRvcmVzWywgIWMoIlRDYyIsICJUQ3AiKSwgd2l0aCA9IEZdDQoNCiNwcmVwcm9jZXNvIHJlbnRhIHRvdGFsDQpyZW50YV91c2QgPSByZW50YV91c2RbLCAhYygiVENjIiwgIlRDcCIsICJpcGNfdXNfMjAiKSwgd2l0aCA9IEZdDQpzZXRuYW1lcyhyZW50YV91c2QsICJ2YXIiLCAidGlwb19kZV9yZW50YSIpDQpyZW50YV91c2RbLCBhdXRvciA6PSAiUHJvcGlhIl0NCg0KI3ByZXByb2Nlc28gcmVudGEgbWVjYW5pc21vcw0KcmVudGFfbWVjYW5pc21vc1ssIGF1dG9yIDo9ICJQcm9waWEiXQ0KcmVudGFfbWVjYW5pc21vcyA9IHJlbnRhX21lY2FuaXNtb3NbLCAhYygiVENjIiwgIlRDcCIsICJpcGNfdXNfMjAiKSwgd2l0aCA9IEZdDQpzZXRuYW1lcyhyZW50YV9tZWNhbmlzbW9zLCAidGlwb19yZW50YSIsICJ0aXBvX2RlX3JlbnRhIikNCnJlbnRhX21lY2FuaXNtb3MgPSBkY2FzdChyZW50YV9tZWNhbmlzbW9zLCBhbmlvK2F1dG9yK3VuaWRhZH50aXBvX2RlX3JlbnRhLCB2YWx1ZS52YXIgPSAidmFsb3IiKQ0KcmVudGFfbWVjYW5pc21vc1ssIGA6PWAocmVudGFfZGlmZXJlbmNpYWxfcHJlY2lvcyA9IHJvd1N1bXMoY2JpbmQoUmRpZnBfY3J1ZG8sIFJkaWZwX2dhcyksIG5hLnJtPVQpLA0KICAgICAgICAgICAgICAgICAgICAgICAgcmVudGFfZXN0YWRvX3RvdGFsID0gcm93U3VtcyhjYmluZChScmV0LCBScmVnKSwgbmEucm09VCksDQogICAgICAgICAgICAgICAgICAgICAgICByZW50YV9zb2JyZXZhbHVhY2lvbiA9IHJvd1N1bXMoY2JpbmQoUnN2eF9jcnVkbywgUnN2eF9nYXMpLCBuYS5ybT1UKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIFN1YnMgPSBTdWJzKi0xKV0NCnJlbnRhX21lY2FuaXNtb3M9IHJlbnRhX21lY2FuaXNtb3NbLCAhYygiUmRpZnBfY3J1ZG8iLCAiUmRpZnBfZ2FzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUnN2eF9jcnVkbyIsICJSc3Z4X2dhcyIpLCB3aXRoPUZdDQpzZXRuYW1lcyhyZW50YV9tZWNhbmlzbW9zLCBjKCJSa2luZHYiLCAiU3VicyIsICJScmV0IiwgICJScmVnIiksIA0KICAgICAgICAgYygicmVudGFfZW1wcmVzYXMiLCAic3Vic2lkaW9zIiwgInJldGVuY2lvbmVzIiwgInJlZ2FsaWFzIikgKQ0KcmVudGFfbWVjYW5pc21vcyA9IG1lbHQocmVudGFfbWVjYW5pc21vcyxpZC52YXJzID0gYygiYW5pbyIsICJhdXRvciIsICJ1bmlkYWQiKSwgdmFyaWFibGUubmFtZSA9ICJ0aXBvX2RlX3JlbnRhIiwNCiAgICAgdmFsdWUubmFtZSA9ICJ2YWxvciIpDQojanVudG8gbG9zIGRhdG9zDQpyZW50YV9jb21wYXJhY2lvbiA9IHJiaW5kKHJlbnRhX3VzZCwgcmVudGFfbWVjYW5pc21vcywgcmVudGFfYXV0b3JlcykNCmBgYA0KDQoNCmBgYHtyfQ0KI2dyYWZpY28gcmVudGEgdG90YWwNCmdyYWZfcmVudGFfdG90YWxfY29tcGFyYWNpb24gPSBnZ3Bsb3QoZGF0YSA9IHJlbnRhX2NvbXBhcmFjaW9uW3N0cl9kZXRlY3QodGlwb19kZV9yZW50YSAsICJyZW50YV90b3RhbHxSZW50YSBwb3Igc3VtYSBkZSBtZWNhbmlzbW9zIikgJiBhbmlvID4gMTk5MF0sIA0KICAgICAgIGFlcyhhbmlvLCB2YWxvciwgY29sb3IgPSBhdXRvcikpKw0KICBnZW9tX2xpbmUoKSsNCiAgZ2VvbV9wb2ludCgpKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikrDQogIGxhYnModGl0bGUgPSAiUmVudGEgZGUgbGEgdGllcnJhIGhpZHJvY2FyYnVyw61mZXJhIHRvdGFsIGRlIEFyZ2VudGluYSIsDQogICAgICAgc3VidGl0bGUgPSAiQ29tcGFyYWNpw7NuIGNvbiBvdHJhcyBlc3RpbWFjaW9uZXMiLA0KICAgICAgIHkgPSAiTWlsbG9uZXMgZGUgVVNEIFRDcCBkZSAyMDIwIiwgeD0iIiwNCiAgICAgICBjYXB0aW9uID0gIk5vdGE6IGVuIGxhIGVzdGltYWNpw7NuIHByb3BpYSBzZSB1dGlsaXrDsyBsYSByZW50YSBwb3IgcG9yIHN1bWEgZGUgbWVjYW5pc21vcyIpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTk2MCwgMjAyMCwgNSkpKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzPWZ1bmN0aW9uKHgpIGZvcm1hdCh4LCBiaWcubWFyayA9ICIuIiwgc2NpZW50aWZpYyA9IEZBTFNFKSkNCmdyYWZfcmVudGFfdG90YWxfY29tcGFyYWNpb24gPXBsb3RfdGhlbWUoIGdyYWZfcmVudGFfdG90YWxfY29tcGFyYWNpb24pK3RoZW1lKA0KICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpDQpncmFmX3JlbnRhX3RvdGFsX2NvbXBhcmFjaW9uDQoNCmdnc2F2ZSgiLi4vcmVzdWx0YWRvcy9hcmdlbnRpbmEvY29tcGFyYWNpb25fYXV0b3Jlc191c2RfdGNwLnBuZyIsIGdyYWZfcmVudGFfdG90YWxfY29tcGFyYWNpb24sDQogICAgICAgICB3aWR0aCA9IDEwLCBoZWlnaHQgPSA1KQ0KYGBgDQoNCmBgYHtyfQ0KI2dyYWZpY28gY29tcGFyYWNpb24gY29uIG90cm9zIGF1dG9yZXMNCmdyYWZfdGlwb3NfcmVudGEgPC0gZ2dwbG90KGRhdGEgPSByZW50YV9jb21wYXJhY2lvblshc3RyX2RldGVjdCh0aXBvX2RlX3JlbnRhLCBjKCJyZW50YV90b3RhbHxSZW50YSBwb3IgZGVzY3VlbnRvcyBzb2JyZSBwbHVzdmFsw61hfFJlbnRhIHBvciBzdW1hIGRlIG1lY2FuaXNtb3N8cmVudGFfZXN0YWRvX3RvdGFsIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAicmVudGFfZGlmZXJlbmNpYWxfcHJlY2lvcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkmIGFuaW8gPjE5OTBdLA0KICAgICAgIGFlcyhhbmlvLCB2YWxvciwgY29sb3IgPSBhdXRvcikpKw0KICBnZW9tX2xpbmUoKSsNCiAgZ2VvbV9wb2ludChzaXplID0gMC41KSsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkrDQogIGZhY2V0X3dyYXAofnRpcG9fZGVfcmVudGEsIHNjYWxlcyA9ICJmcmVlX3kiKSsNCiAgbGFicyh0aXRsZSA9ICJSZW50YSBkZSBsYSB0aWVycmEgaGlkcm9jYXJidXLDrWZlcmEiLA0KICAgICAgIHN1YnRpdGxlID0gIkNvbXBhcmFjacOzbiBkZSBlc3RpbWFjaW9uZXMiLA0KICAgICAgIHkgPSAiTWlsbG9uZXMgVVNEIFRDcCBkZSAyMDIwIikrDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTk5MCwgMjAyMCwgNSkpDQojICMgIyBnZ3Bsb3RseShncmFmX3RpcG9zX3JlbnRhLCB3aWR0aCA9IDgwMCwgaGVpZ2h0ID0gNjAwKQ0KZ3JhZl90aXBvc19yZW50YSA9IHBsb3RfdGhlbWUoZ3JhZl90aXBvc19yZW50YSkrdGhlbWUoDQogIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoMTIpLCBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkgKQ0KDQpncmFmX3RpcG9zX3JlbnRhDQpnZ3NhdmUoIi4uL3Jlc3VsdGFkb3MvYXJnZW50aW5hL2NvbXBhcmFjaW9uX2F1dG9yZXNfdGlwb19yZW50YV91c2RfdGNwLnBuZyIsDQogICAgICAgZ3JhZl90aXBvc19yZW50YSwgd2lkdGggPSAxNiwgaGVpZ2h0ID0gMTApDQpgYGANCg0K